GreenPlum 使用gpload通过gpfdist文件实现数据高速加载

1,gpload环境准备

环境准备请参考博主以前的文章gpfdist部署实战:http://blog.csdn.net/mchdba/article/details/72540806  ,安装好gpfdist后,gpload也自动有了,可以自动使用。

安装完后,可以启动gpfdist服务:nohup /data/greenplum/bin/gpfdist -d /data/greenplum/ -p 8090> /home/gpadmin/gpfdist.log  &

2,gpload简介

Greenplum的gpload工具通过可读外部表和并行化文件服务器gpfdist(或gpfdists)来加载数据。gpload处理并行化的基于文件的外部表设置,以及允许我们使用单个YAML文件来配置数据格式,外部表定义,以及gpfdist或gpfdists。

要使用gpload工具有几个前提条件必须满足:
1.    使用gpload的服务器必须安装Python 2.6.2或者以上版本,pygresql工具和pyyaml工具(数据库服务端已经安装了python和需要的python库文件)
2.    必须装gpfdist程序,并把它设置到环境变量PATH中(可以从数据库服务器端的安装目录的子目录bin中拷贝该工具)
3.    确保使用gpload工具的ETL服务器与Greenplum所有服务器的联通性,以及机器名解析正确

4.    确保greenplum集群的所有服务器之间的网络是联通的。

gpload通过它的控制文件(YAML格式控制文件)指定装载的细节信息。所以编写控制文件是用好gpload的关键所在。gpload的控制文件采用YAML1.0.0.1文档格式编写,因此它必须得是有效的YAML格式。通过编写的yaml文件的配置,gpload服务与greenplum集群打通,一个yaml配置对应一个greenplum里面的表。

3,查看gpload参数


-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

[[email protected]~]$ gpload -?

gpload [options] -f configuration file

Options:

-h hostname: host to connect to

-p port: port to connect to

-U username: user to connect as

-d database: database to connect to

-W: force password authentication

-q: quiet mode

-D: do not actually load data

-v: verbose

-V: very verbose

-l logfile: log output to logfile

--no_auto_trans: do not wrap gpload in transaction

--gpfdist_timeout timeout: gpfdist timeout value

--version: print version number and exit

-?: help

[[email protected]~]$

blog源地址:http://blog.csdn.net/mchdba/article/details/72681969,博主黄杉(mchdba),谢绝转载

4,开始gpload实战

创建全局序列,用来获取汇总执行gpload的次数。


-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

create SEQUENCE gpload_audit_seq INCREMENT BY 1 MINVALUE 1 NO MAXVALUE START WITH 1;
select * from gpload_audit_seq ;

创建审计表,记录每一次gpload执行的开始和结束事件信息


-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

create table gpload_audit(                                                                
    id bigint,
    state text,
    mode text,
    tablename text,
    updatetime timestamp
) distributed by (id);

创建gpload加载的表


-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

CREATE TABLE expenses
(
    name text,
    amount numeric,
    category text,
    des text,
    update_date date
);

在gpload服务器上建立临时测试数据文件天


-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

[[email protected]]$ more t21.txt

1|aaa

2|zhangsan

[[email protected]]$

[[email protected]]$ more t22.txt

3|wanger

4|mazi

[[email protected]]$

在greenplum集群的master库上,建立外部表:


-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

create table t02 (

id integer,

name varchar(128)

)

location (

‘gpfdist://192.168.2.72:8090/gpextdata/t21.txt‘,

‘gpfdist://192.168.2.72:8090/gpextdata/t22.txt‘

)

Format ‘TEXT‘ (delimiter as E‘|‘ null as ‘‘ escape ‘OFF‘)

;

创建gpload.yml配置文件


-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

[[email protected]~]$ more g2.yml

---

VERSION: 1.0.0.1

DATABASE: yueworld_db

USER: mch

HOST: 10.254.2.111

PORT: 5432

GPLOAD:

INPUT:

- SOURCE:

LOCAL_HOSTNAME:

- 192.168.2.72

PORT: 8090

FILE:

- /data/greenplum/gpextdata/t21.txt

- /data/greenplum/gpextdata/t22.txt

- COLUMNS:

- id: int

- name: text

- FORMAT: text

- DELIMITER: ‘|‘

- ERROR_LIMIT: 25

OUTPUT:

- TABLE: dw.t02

- MODE: INSERT

SQL:

- BEFORE: "INSERT INTO gpload_audit
VALUES(nextval(‘gpload_audit_seq‘), ‘start‘, ‘insert‘,
‘zhangyun_schema.expenses‘, current_timestamp)"

- AFTER:
"INSERT INTO gpload_audit VALUES(nextval(‘gpload_audit_seq‘), ‘end‘,
‘insert‘, ‘zhangyun_schema.expenses‘, current_timestamp)"

[[email protected]~]$

在greenplum db库上赋予mch账号权限:


-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

yueworld_db=# grant select,insert on gpload_audit to mch;

GRANT

yueworld_db=# grant select,insert,update,delete on t01 to mch;

GRANT

yueworld_db=#

yueworld_db=# grant select,usage,update on gpload_audit_seq to mch;

GRANT

yueworld_db=# grant all on table t02 to mch;

GRANT

yueworld_db=#

去gpload服务器上,执行gpload:


-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

[[email protected]~]$ gpload -f g2.yml

2017-05-15 17:52:30|INFO|gpload session started 2017-05-15 17:52:30

2017-05-15 17:52:30|INFO|setting schema ‘public‘ for table ‘t02‘

2017-05-15
17:52:30|INFO|started gpfdist -p 8090 -P 8091 -f
"/data/greenplum/gpextdata/t21.txt /data/greenplum/gpextdata/t22.txt"
-t 30

2017-05-15 17:52:30|INFO|running time: 0.29 seconds

2017-05-15 17:52:30|INFO|rows Inserted          = 4

2017-05-15 17:52:30|INFO|rows Updated           = 0

2017-05-15 17:52:30|INFO|data formatting errors = 0

2017-05-15 17:52:30|INFO|gpload succeeded

[[email protected]~]$

在greenplum服务器上查询


-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

yueworld_db=# select * from public.t01_ext_1;;

id | name

----+------

1 | aaa

2 | zhangsan

3 | wanger

4 | mazi

(8 rows)

yueworld_db=#

奇怪的是,当你再执行一次gpload
-f y2.yml的时候,会持续往外部表里面写数据,而且是将原有的数据重新写入到t02里面去,执行第二次,rows
inserted数量是8,等执行第三次的时候,这个rows Inserted会变成16,如下看执行过程:


[[email protected]~]$ gpload -f g2.yml

2017-05-15 17:52:30|INFO|gpload session started 2017-05-15 17:52:30

2017-05-15 17:52:30|INFO|setting schema ‘public‘ for table ‘t02‘

2017-05-15
17:52:30|INFO|started gpfdist -p 8090 -P 8091 -f
"/data/greenplum/gpextdata/t21.txt /data/greenplum/gpextdata/t22.txt"
-t 30

2017-05-15 17:52:30|INFO|running time: 0.29 seconds

2017-05-15 17:52:30|INFO|rows Inserted          = 8

2017-05-15 17:52:30|INFO|rows Updated           = 0

2017-05-15 17:52:30|INFO|data formatting errors = 0

2017-05-15 17:52:30|INFO|gpload succeeded

[[email protected]~]$

Bty:这里只测试了一个表t02,如果实际生产环境中有多个大表的话,可以编写多个yml文件,用gpload启动多进程同时进行数据高速加载。这里曾经做过测试,500w的原始数据,fil://xxx.com方式需要2个小时,直接insert into select …需要4个小时,而gpload结合gpfdist只需要20分钟。

参考文档:https://gpdb.docs.pivotal.io/4330/client_tool_guides/load/unix/gpload.html

时间: 2024-10-04 18:45:49

GreenPlum 使用gpload通过gpfdist文件实现数据高速加载的相关文章

IOS数据懒加载

懒加载,又称为延迟加载.说的通俗一点,就是在开发中,当程序中需要利用的资源时.在程序启动的时候不加载资源,只有在运行当需要一些资源时,再去加载这些资源. 我们知道iOS设备的内存有限,如果在程序在启动后就一次性加载将来会用到的所有资源,那么就有可能会耗尽iOS设备的内存.这些资源例如大量数据,图片,音频等等 下面举个例子: 1> 定义控件属性,注意:属性必须是strong的,示例代码如下: @property (nonatomic, strong) NSArray *imageList; 2>

asp.net使用httphandler打包多CSS或JS文件以加快页面加载速度

介绍 使用许多小得JS.CSS文件代替一个庞大的JS或CSS文件来让代码获得更好的可维 护性,这是一个很好的实践.但这样做反过来却损失了网站的性能.虽然你应该将你的Javascript代码写在小文件中并且将大的CSS文件分割到小文件 中,当一个浏览器请求那些JS以及CSS文件,它却将为每一个文件产生一个请求.每一个HTTP请求将导致从你的浏览器到服务器上的一次"往返",从响应 服务器到客户端浏览器之间的等待时间称之为"延时".因此,如果你有四个JS文件以及三个CSS

ArcGIS Engine中数据的加载 (转)

1.加载Shapefile数据 1 IWorkspaceFactory pWorkspaceFactory; 2 IFeatureWorkspace pFeatureWorkspace; 3 IFeatureLayer pFeatureLayer; 4 5 //获取当前路径和文件名 6 OpenFileDialog dlg = new OpenFileDialog(); 7 dlg.Filter = "Shape(*.shp)|*.shp|All Files(*.*)|*.*"; 8

Unity3d通用工具类之数据配置加载类

今天,我们来讲讲游戏中的数据配置加载. 什么是游戏数据加载呢?一般来说游戏中会有场景地图. 按照国际惯例,先贴一张游戏场景的地图: 在这张地图上,我们可以看到有很多正六边形,正六边形上有树木.岩石等. 哎!那么问题也就来了.大家会思考这张地图怎么啦.关游戏数据配置有什么关系?我们做好场景直接loding进来不就行了? 这也就是问题所在,如果你是直接loding进场景有很多问题: 1.场景是死的.只能是这个做好的场景.如果你想删除一些正六边形,想改变一些树木的位置,如何完成.有人会想,那我再做一个

转载:数据的加载性能比较

转载:ObservableCollection与List在加载数据上的性能比较 使用Listview等控件加载数据时,第一时间想到的就是ObservableCollection,这个东西蛮好,如果新增.删除.修改数据,都会自动更新UI. 可是,如果不需要增删改,显示大数据量,这个东西的加载性能怎么样呢? 做个实验. 1.准备数据,在本地磁盘上创建20000个文件,将其加载到ListView中. var testPath = @"D:\TestLargeData\Test10000";

蜡炬教育:如何处理机器学习中大型数据的加载问题?

原标题:蜡炬教育:如何处理机器学习中大型数据的加载问题? 蜡炬教育老师表示,在处理机器学习算法时,经常会因为数据库太大而导致无法放入内存中,而遇到这样几个问题:当运行数据集算法而导致崩溃时如何解决?当需要处理大容量数据文件时该如何加载?如何方便快捷的解决内存不足的问题? 针对以上问题,蜡炬教育老师给出7个建议: 1.分配更多内存某些ML工具或数据库默认内存配置不合理,可以看看是否可以手动分配. 2.使用较小样本确认是否需要处理所有数据?在对最终数据拟合前,使用随机抽取数据样本这个示例即可. 3.

JS实现-页面数据无限加载

在手机端浏览网页时,经常使用一个功能,当我们浏览京东或者淘宝时,页面滑动到底部,我们看到数据自动加载到列表.之前并不知道这些功能是怎么实现的,于是自己在PC浏览器上模拟实现这样的功能.先看看浏览效果: 当滚动条滚动到页面底部时,提示“正在加载…”. 当页面已经加载了所有数据后,滚动到页面底部会提示“数据已加载到底了”: 实现数据无限加载的过程大致如下: 1.滚动条滚动到页面底部. 2.触发ajax加载,把请求返回的数据加载到列表后面. 如何判断滚动条是否滚动到页面底部?我们可以设置一个规则:当滚

Resx 文件无效,未能加载 .RESX 文件中使用的类型

错误信息提示: 错误 339 Resx 文件无效.未能加载 .RESX 文件中使用的类型 Forms.ListItems, Forms, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.请确保已在项目中添加了必需的引用. 第 136 行,位置 5. E:\Forms\Form2.resx 136 5 Forms <?xml version="1.0" encoding="utf-8"?> <

WinForm ListView虚拟模式加载数据 提高加载速度

将VirtualMode 属性设置为 true 会将 ListView 置于虚拟模式.控件不再使用Collection.Add()这种方式来添加数据,取而代之的是使用RetrieveVirtualItem(Occurs when the ListView is in virtual mode and requires a ListViewItem.)和CacheVirtualItems两个事件,单独使用RetrieveVirtualItem也可以,CacheVirtualItems这个事件主要是