GPDB-特性实践

本文介绍了GPDB的特性,包括最大特性、主要特性,如大规模并行处理、高性能分析等。讨论了GPDB与Hadoop + Hive的对比,数据加载方法,如COPY命令和gpfdist工具,并分享了使用MADlib扩展进行数据库内分析的实践,涉及Array Operations、Low-Rank Matrix Factorization等操作。同时,文章提到了在实际操作中遇到的问题和解决方案。
摘要由CSDN通过智能技术生成

date: 2020-01-11 15:51:39

前段时间导师要求了解 GreenPlum数据库,后来安装和使用了一下,感觉和其他数据库没有什么不同,于是就不了了之了。现在重新看一遍 GPDB 的特性并尝试使用这些特性。

其实,官方宣传页上写的特性才是真正需要我去了解的。

特性

首先,GPDB的特性是什么?从哪里找?产品的宣传页上肯定有。

最大特性

GPDB 的最大特性就是 MPP, 即 Massively Parallel Processing。 在首页上,最明显的就是这两个:

  • Massively Parallel, 大规模并行
  • Analytics,分析
    max
    然后,下滑页面,两个明显的特性是:
  • Power at scale: High performance on petabyte-scale data volumes. PB级数据高性能处理。
  • True Flexibility: Deploy anywhere. 部署灵活。
    main1
    main2

主要特性

首页接着往下滑,写明了 GPDB 的主要特性:

  • MPP Architecture
  • Petabyte-Scale Loading: 加载速度随着每个额外节点的增加而增加,每个机架的加载速度超过10Tb/h ( 约为 347.22 GB/s ) 。
  • Innovative Query Optimization: 工业界中首个大数据工作负载的 cost-based query optimizer.
  • Polymorphic Data Storage: 多态数据存储。完全控制表和*–**分区存储、执行和压缩的配置。
  • Integrated In-Database Analytics: Apache MADlib提供的一个库,用于可伸缩的数据库内分析,通过用户定义的函数扩展Greenplum数据库的SQL功能。
  • Federated Data Access: 联邦数据访问。使用Greenplum optimzer和 query processing engine 查询外部数据源。包括Hadoop、Cloud Storage、ORC、AVRO、Parquet等 Polygot 数据存储。
    main fearture
    遗憾的是,首页上的这些图标都不能点击。所以要体验这些特性,只能自己去探索了。

TODO

  1. 从 hadoop 中查询数据。

GPDB vs. Hadoop + Hive

GreenPlum vs. Hadoop
来源:Greenplum介绍, 这是 Alibaba 在 2011.02.17 做的汇报, GPDB 版本为 4.x.

对比 Hadoop + Hive, GPDB 的查询性能比 Hive 好,但是 GPDB 支持的集群节点数太少,最多可以 1000 个 segment, 而Hive 可支持上万个节点。

Data Loading

主要有 3 种加载方法:

  • the SQL INSERT statement: 在加载大量数据时低效,适用于小数据集。
  • the COPY command: 可以自定义 the format of the text file 以解析成 columns and rows. 比 INSERT 快, 但是不是一个 parallel process.
  • gpfdist and gpload: 可以高效的将外部数据转储到数据表中。快速,并行加载。Administrator 可以定义 single row error isolation mode 以继续加载格式正常的 rows。 gpload 需要提前编写一个 YAML-formated control file, 用于描述 source data location,format, transformations required, participating hosts, database destinations, and others. 这允许你执行一个复杂的加载任务。
    external table
Figure 1. External Tables Using Greenplum Parallel File Server (gpfdist)

以下只演示 gpfdistgpload 的使用:

gpfdist
gpfdist [-d directory] [-p http_port] [-l log_file] [-t timeout] 
   [-S] [-w time] [-v | -V] [-s] [-m max_length]
   [--ssl certificate_path [--sslclean wait_time] ]
   [-c config.yml]

示例

Uses the gpfdist protocol to create a readable external table, ext_expenses, from all files with the txt extension. The column delimiter is a pipe(|) and NULL (’ ') is a space. Access to the external table is single row error isolation mode. If the error count on a segment is greater than five (the SEGMENT REJECT LIMIT value), the entire external table operation fails and no rows are processed.

=# CREATE EXTERNAL TABLE ext_expenses ( name text, 
   date date, amount float4, category text, desc1 text ) 
   LOCATION ('gpfdist://etlhost-1:8081/*.txt', 
             'gpfdist://etlhost-2:8082/*.txt')
   FORMAT 'TEXT' ( DELIMITER '|' NULL ' ')
   LOG ERRORS SEGMENT REJECT LIMIT 5;

To create the readable ext_expenses table from CSV-formatted text files:

=# CREATE EXTERNAL TABLE ext_expenses ( name text, 
   date date,  amount float4, category text, desc1 text ) 
   LOCATION ('gpfdist://etlhost-1:8081/*.txt', 
             'gpfdist://etlhost-2:8082/*.txt')
   FORMAT 'CSV' ( DELIMITER ',' )
   LOG ERRORS SEGMENT REJECT LIMIT 5;

以下是我的个人实验:

  1. 创建一个数据目录 ~/Datasets/baike, 将数据集baike_triple.txt移动到该目录下。

    这里的数据集来自 CN-DBpedia, 包含 900万+ 的 百科实体 以及 6700万+ 的 三元组关系。其中 mention2entity 信息 110万+,摘要信息 400万+,标签信息 1980万+,infobox 信息 4100万+。大小约为 4.0 G。 数据实例如下:

    "1+8"时代广场   中文名  "1+8"时代广场
    "1+8"时代广场   地点    咸宁大道与银泉大道交叉口
    "1+8"时代广场   实质    城市综合体项目
    "1+8"时代广场   总建面  约11.28万方
    "1.4"河南兰考火灾事故   中文名  "1.4"河南兰考火灾事故
    "1.4"河南兰考火灾事故   地点    河南<a>兰考县</a>城关镇
    "1.4"河南兰考火灾事故   时间    2013年1月4日
    
  2. 开启 gpfdist 后台:

    gpfdist -d ~/Datasets/baike -p 8081 > /tmp/gpfdist.log 2>&1 &
    ps -A | grep gpfdist # 查看进程号
    30693 pts/8    00:00:00 gpfdist  # 表示进程号为 30693
    

    选项说明:

    • -d directory: 指定一个目录,gpfdist 将从该目录中为可读外部表提供文件,或为可写外部表创建输出文件。如果没有指定,默认为当前目录。
    • -p http_port: gpfdist 提供文件要使用的HTTP端口。默认为8080。

    查看日志:

    gt@vm1:~$ more /tmp/gpfdist.log 
    2020-01-13 02:49:38 30693 INFO Before opening listening sockets - following listening sockets are a vailable:
    2020-01-13 02:49:38 30693 INFO IPV6 socket: [::]:8081
    2020-01-13 02:49:38 30693 INFO IPV4 socket: 0.0.0.0:8081
    2020-01-13 02:49:38 30693 INFO Trying to open listening socket:
    2020-01-13 02:49:38 30693 INFO IPV6 socket: [::]:8081
    2020-01-13 02:49:38 30693 INFO Opening listening socket succeeded
    2020-01-13 02:49:38 30693 INFO Trying to open listening socket:
    2020-01-13 02:49:38 30693 INFO IPV4 socket: 0.0.0.0:8081
    Serving HTTP on port 8081, directory /home/gt/Datasets/baike
    
  3. gpadmin 身份开启一个 psql session, 创建 tablesext_baike用于存放加载的数据,ext_load_baike_err 用于存放加载错误的日志。

psql -h localhost -d db_kg # 进入数据库 db_kg

# 创建外部表
CREATE EXTERNAL TABLE ext_baike (
head text, rel text, tail text) 
LOCATION ('gpfdist://vm1:8081/baike_triples.txt')
FORMAT 'TEXT' (DELIMITER E'\t')
LOG ERRORS SEGMENT REJECT LIMIT 50000;

# 创建内部存储表
CREATE TABLE tb_baike (
id SERIAL PRIMARY KEY, head text, rel text, tail text);

创建外部表语法详细: CREATE EXTERNAL TABLE .

创建 外部表后,就可以直接从外部表读取数据了,例如:

db_kg=# select * from ext_baike limit 10;
      head       |   rel    |     tail      
-----------------+----------+---------------
 **            | 中文名   | **
 **            | 作者     | Amarantine
 **            | 小说进度 | 暂停
 **            | 连载网站 | 晋江文学城
 *西方犯罪学概论 | BaiduTAG | 书籍
 *西方犯罪学概论 | ISBN     | 9787811399967
 *西方犯罪学概论 | 作者     | 李明琪 编
 *西方犯罪学概论 | 出版时间 | 2010-4
 *西方犯罪学概论 | 定价     | 22.00*西方犯罪学概论 | 页数     | 305
(10 rows)
  1. 将外部表数据导入到内部表:

    INSERT INTO tb_baike(head, rel, tail) SELECT * FROM ext_baike;
    

    由于 虚拟机的存储空间不足,最后运行失败。可以在日志中看到:

    more greenplum/data/data1/primary/gpseg0/pg_log/gpdb-2020-01-13_000000.csv
    2020-01-13 04:10:14.623480 UTC,,,p24832,th930718592,,,,0,,,seg0,,,,,"PANIC","53100","could not writ
    e to file ""pg_xlog/xlogtemp.24832"": No space left on device",,,,,,,0,,"xlog.c"
    

    start: 15:33:30

    abnormally end: 16:03

    错误:

    db_kg=# INSERT INTO tb_baike(head, rel, tail) SELECT * FROM ext_baike;
    ERROR: gpfdist error: unknown meta type 108 (url_curl.c:1635) (seg0 slice1 127.0.1.1:6000 pid=15880) (url_curl.c:1635)
    CONTEXT: External table ext_baike, file gpfdist://vm1:8081/baike_triples.txt

    LIMIT 10000;

    start 16:10:00

    end: 17:12:42

    ERROR: interconnect encountered a network error, please check your network (seg3 slice1 192.168.5
    6.6:6001 pid=11612)
    DETAIL: Failed to send packet (seq 1) to 127.0.1.1:56414 (pid 15913 cid -1) after 3562 retries in
    3600 seconds

Cost-based Query Optimizer

当master接受到一条SQL语句,会将这条语句解析为执行计划 DAG,将 DAG 中不需要进行数据交换的划分为 slice ,join,aggregate,sort 的时候,都会涉及到 slice 的重分布,会有一个 motion 任务来执行数据的重分布。将 slice 下发到涉及到的相关 segment 中。来源:GreenPlum:基于PostgreSQL的分布式关系型数据库

参考 About Greenplum Query Processing

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值