gpload使用


1. 介绍

windows下分别用Kettlecmd命令调用GPload。

1.1. 目的

使用gpload,一方面我们可以实现GREENPLUM中不能直接实现的merge操作,另外通过结合命名管道,我们可以实现无落地文件的并行快速加载。从而帮助我们提高海量数据加载效率,也避免了使用传统落地文件方式加载的过大存储开销,以及超大文件落地过程导致的加载性能瓶颈

2. 安装部署

2.1.安装包准备

1python2.5.4版本

  • GPload的加载程序(gpload.py)使用python写的,并且windows下面GPload只支持python2.5.4版本,用其他版本运行会报异常;python的版本只能是32位,不然也会报异常。

2PyGreSQL-4.1.1.win-amd64-py2.5.exe

  • greenplum的内核是PostGrelSql,这个组件是python调用PostGreSql使用

3PyYAML-3.10.win32-py2.5.exe

  • 这个组件使用写一些配置文件所使用如(*.yml)

(4)greenplum-loaders-5.15.1-WinXP-x86_32.msi

  • 这个是windows下面GPload的安装包

(5)pdi-ce-8.2.0.0-342

  • 这个是kettle8.2的安装包

2.2.软件安装

1python安装运行python安装包,安装到指定目录,当安装选择用户时,不要选择for all users. 不然安装PyGreSQL和PyYAML的python组件会找不到python注册目录。安装完成打开cmd控制台输入python,如果出现不是内部或外部命令,则请配置环境变量

2PyGreSQL安装直接安装exe文件,选择用户时也选择"this user only"。

3PyYAML安装:直接安装就行,选择用户选择"this user only"。

4gpload安装:greenplum-loaders-5.15.1-WinXP-x86_32.msi直接安装就行

5kettle安装:下载完成后Kettle解压缩放置任意盘即可,双击spoon.bat运行。(已经安装好jdk)


3.gpload使用

3.1.cmd命令模式下使用gpload

新建一个gpload.yml文件,内容如下:

DATABASE: gpdb name  #gp数据库名

USER: gpdb username  #gp用户名

HOST: gpdb host      #gp数据ip地址

PORT: gpdb port      #gp端口

GPLOAD:

INPUT:

- SOURCE:

    LOCAL_HOSTNAME:

    - file host    #加载文件ip地址

    FILE:

    - gpload data file #文件地址

- COLUMNS:         #加载的列

  - id: varchar(50)

  - ctif_tp: varchar(10)

- FORMAT: file format csv/text #文件格式csv/text

- DELIMITER: ','   #文件中数据分隔符

- ERROR_LIMIT: 100 #超过多少错误gpload停止

- LOG_ERRORS: True

OUTPUT:

- TABLE: test      #gpdb表名

- MODE: insert     #gpload处理方式 insert/update/merage

 

实例:

VERSION: 1.0.0.1

DATABASE: gp6

USER: gpadmin

HOST: hadoop100

PORT: 5432

GPLOAD:

    INPUT:

    - SOURCE:

        LOCAL_HOSTNAME:

         - 192.168.1.10

        PORT: 8081

        FILE: ['E:\greenplum\greenplum-loaders-5.28.0\load\load06.txt']--此文件需事先准备好

    - COLUMNS:

         - id:

         - "name":

    - FORMAT: TEXT

    - DELIMITER: ','

    - QUOTE: ''

    - HEADER: FALSE

    - ENCODING: UTF8

    - ERROR_LIMIT: 50

    OUTPUT:

    - TABLE: dm.b

    - MODE: insert

GPload使用要打开对应的gpfdist服务,运行bin目录下的gpfdist.exe即可

打开控制台进入GPload的安装bin目录,调用命令 gpload.py -f gpload.yml。弹出输入password密码后GPload就会把数据插入GP数据库。

 

 

3.2 kettle下使用gpload

新建一个kettle转换,拖入表输入和gpload组件,下一步进行配置gpload组件。

 

load method有两个选项,Automatic load (at the end)代表自动执行gpload加载数据;Manual load (only creation of files)代表手动执行,只生成cfg.dat文件,需要手动执行gpload命令;cfg文件是gpload的yml文件,dat是需要加载的数据文件。

 

Erase cfg/dat files after use这个选择是指使用后是否删除cfg,dat文件 load action(加载方式):insert(插入),update(更新),merge(合并,存在更新,不存在则插入),update和merge需要在字段列表中至少存在一个字段match为true,用户匹配更新的字段,match列后面还有一个update列,设为true表示遇到更新的记录行更新该字段。 注意:kettle里面的gpload字段的match和update好像设置无效,改为“是”保存在打开又变成了“否”,导致无法增量更新。目前解决方案是:直接修改转换文件,找到字段映射那块,手动修改为Y,暂时解决问题,可增量更新。

 

 

 

local host配置port为gpfdist使用的端口,host为gpfdist的ip,不要使用127.0.0.1,使用的ip必须得greenplum库能ping通,port建议不设置,默认会在8000-9000选取可用端口,如果设置了port,需保证gpload并行执行时使用的端口不同,不然会端口冲突,导致失败。

 

path to the gpload :E:\greenplum\greenplum-loaders-5.28.0\bin\gpload.py control file E:\greenplum\greenplum-loaders-5.28.0\bin\control07.cfg ---生成cfg文件保存的地址及control文件名

error table不填 ---加载出现错误的数据,填写了会自动在gp库中创建改表,加载错误的数据会存到改表中

log file E:\greenplum\greenplum-loaders-5.28.0\log\log8.txt ---gpload运行日志

data file :E:\greenplum\greenplum-loaders-5.28.0\load\load08.txt---生成的dat数据文件地址及dat文件名

Null as不填---null值替换

encoding:utf-8---编码

max errors:50 ---允许错误数量

delimiter逗号---数据字段列分隔符,建议使用一些特殊的字段,避免数据中存在该字符,倒是加载数据出现错误,或在执行gpload之前将数据中的特殊字符替换掉

 

配置完后保存转换,进入gp服务器中。

su - gpadmin


vi /home/gpadmin/.bash_profile 

在最后添加一行:

export PGPASSWORD=atguigu(此处是你gp库gpadmin用户的密码)

让环境变量生效:

source .bash_profile

 

最后在kettle中启动转换,可以看到转换已完成,数据已入库。

 

4.问题解决方案

4.1.错误设置PATH 和 PYTHONPATH

cmd窗口下,cd到gpload目录下,执行gpload -f xxxx.yml文件(此处的yml文件是没有问题的,已经在linux下经过了验证),提示:

gpload needs pyyaml.  You can get it from http://pyyaml.org.

这是由于开始时,设置了错误的PATH 和 PYTHONPATH所致,其实只是这两个环境变量的值顺序错了,这点我相信经常用linux和unix的朋友应该非常了解,系统在查找路径时,会从开始往后找,如果第一个就找到了,就不再往下查找了

 

4.2.python版本问题

执行 gpload -f xxxx.yml,报错,如下:

C:\Python26>gpload.py -f r_ne_cell_c_bj.yml
gpload was unable to import The PyGreSQL Python module (pg.py) - DLL load failed: 找不到指定的模块

这是由于安装的python环境不是2.5.4所致,安装正确的版本即可

4.3.不能连接文件服务器问题

 

设置的hostname一定要是内网ip,因为通过gpfdist创建的服务文件是通过IP来创建的,该IP是一个外网的IP,而子节点是在内网上面的,

不能访问到外网的IP,重新把IP修改为内网IP后,重新导入,成功。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM