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