Kettle 中文名稱叫水壺,該項目的主程序員MATT 希望把各種數據放到一個壺裏,然後以一種指定的格式流出。Kettle這個ETL工具集,它允許你管理來自不同數據庫的數據,通過提供一個圖形化的用戶環境來描述你想做什麼,而不是你想怎麼做。
Kettle中有兩種腳本文件,transformation和job,transformation完成針對數據的基礎轉換,job則完成整個工作流的控制
目錄
- Kettle組件類型基本說明tans/job
- Kettle大數據組件的應用說明
- 基於表對錶的同步
- 基於表到hdfs的同步
- 基於文件到hdfs的同步
- 基於表到hive的同步
- 基於表到hbase的同步
- 基於文件到hbase的同步
- 基於表到phoenix的同步
- Kettle中sqoop的調用
- Kettle中JavaScript的基本應用
- 作業調用作業及轉換
- 如需運用大數據組件 需要將如下:
- core-site.xml
- hbase-site.xml
- hdfs-site.xml
- hive-site.xml
- mapred-site.xml
- yarn-site.xml
配置文件放入 $KETTLE_HOME/plugins/pentaho-big-data-plugin/hadoop configurations/hdp24
並在$KETTLE_HOME/plugins/pentaho-big-data-plugin/plugin.properties文件中添加 active.hadoop.configuration=hdp24
Kettle組件類型基本說明Trans
- Kettle設計好後可產出兩種腳本文件,transformation(轉換,後綴爲.ktr)和job(作業,後綴爲.kjb),這兩類腳本都是xml格式。
- Transformation完成針對數據的基礎轉換,作用和地位類似於DataStage中的Job。
- Job則完成整個工作流的控制,作用和地位類似DataStage中的Sequence。
注:一般程序使用job開發即可,但針對大數據相關程序可以使用Transformation開發,然後使用job去封裝。
類別 | 環節名稱 | 功能說明 |
Input | 文本文件輸入 | 從本地文本文件輸入數據 |
表輸入 | 從數據庫表中輸入數據 | |
獲取系統信息 | 讀取系統信息輸入數據 | |
Output | 文本文件輸出 | 將處理結果輸出到文本文件 |
表輸出 | 將處理結果輸出到數據庫表 | |
插入/更新 | 根據處理結果對數據庫表機型插入更新,如果數據庫中不存在相關記錄則插入,否則爲更新。會根據查詢條件中字段進行判斷 | |
更新 | 根據處理結果對數據庫進行更新,若需要更新的數據在數據庫表中無記錄,則會報錯停止 | |
刪除 | 根據處理結果對數據庫記錄進行刪除,若需要刪除的數據在數據庫表中無記錄,則會報錯停止 | |
Lookup | 數據庫查詢 | 根據設定的查詢條件,對目標表進行查詢,返回需要的結果字段 |
流查詢 | 將目標表讀取到內存,通過查詢條件對內存中數據集進行查詢 | |
調用DB存儲過程 | 調用數據庫存儲過程 | |
Transform | 字段選擇 | 選擇需要的字段,過濾掉不要的字段,也可做數據庫字段對應 |
過濾記錄 | 根據條件對記錄進行分類 | |
排序記錄 | 將數據根據某以條件,進行排序 | |
空操作 | 無操作 | |
增加常量 | 增加需要的常量字段 | |
Scripting | Modified Java Script Value | 擴展功能,編寫JavaScript腳本,對數據進行相應處理 |
Mapping | 映射(子轉換) | 數據映射 |
Job | Sat Variables | 設置環境變量 |
Get Variables | 獲取環境變量 |
Kettle組件類型基本說明Job
類別 | 環節名稱 | 功能說明 |
Job entries | START | 開始 |
DUMMY | 結束 | |
Transformation | 引用Transformation流程 | |
Job | 引用Job流程 | |
Shell | 調用Shell腳本 | |
SQL | 執行sql語句 | |
FTP | 通過FTP下載 | |
Table exists | 檢查目標表是否存在,返回布爾值 | |
File exists | 檢查文件是否存在,返回布爾值 | |
Javascript | 執行JavaScript腳本 | |
Create file | 創建文件 | |
Delete file | 刪除文件 | |
Wait for file | 等待文件,文件出現後繼續下一個環節 | |
File Compare | 文件比較,返回布爾值 | |
Wait for | 等待時間,設定一段時間,kettle流程處於等待狀態 | |
Zip file | 壓縮文件爲ZIP包 | |
作業,可串行執行或並行執行。 串行執行,一條線,按步先後執行;兩條線,則先執行完其中一條線再執行另一條線 並行執行,兩條線同時執行 執行結果,true(成功)或false(失敗),根據執行結果可控制流程走向
轉換,一開始,所有步驟同時運行,記錄從最前端的步驟向後傳遞,傳遞到相應步驟則記錄被該步驟做相應處理,處理完成再往後傳遞。(如果不做連接 優先執行SQL)
基於表對錶的同步
表對錶同步是最基本的同步方式之一 新建一個轉換:File->New-> Transformation
所有數據庫連接可以使用數據庫連接參數。
其中:JDBC屬於普通數據庫,JNDI屬於RAC數據庫。配置RAC需要將下面參數放到$KETTLE_HOME/simple-jndi/jdbc.properties文件中
RAC1/type=javax.sql.DataSource
RAC1/driver=oracle.jdbc.driver.OracleDriver RAC1/url=jdbc:oracle:thin:@(RAC連接串)
RAC1/user=數據庫用戶名 RAC1/password=數據庫密碼
基於表到HDFS的同步
爲了防止HDFS中文數據亂碼,需要在數據庫讀取數據時自動轉換成UTF8、GBK等
基於文件到HDFS的同步
基於表到hive的同步
- 一種方式爲直接向hive裏同步數據
- 另一種方式爲hive創建分區表並指定分區路徑,向HDFS的分區路徑導入數據,並在kettle裏做更新數據等sql操作
基於表到hbase的同步
基於文件到hbase的同步
文件形式無法使用sql添加唯一主鍵,採用kettle的JavaScript來添加唯一主鍵字段
基於表到phoenix的同步
- 從集羣拷貝 phoenix-core-xxx.jar phoenix-xxx-client.jar這兩個文件到如下路徑$KETTLE_HOME/lib/
- 添加數據庫連接方式
- 如果存在jar包衝突,刪除guava-17.0.jar
Kettle中調用sqoop來進行數據傳輸
- Sqoop import爲DB-bigdata
- Sqoop export爲bigdata-DB
- JOB裏纔可以調用sqoop組件
Kettle中JavaScript的基本應用
Kettle自帶例子
菜單:文件->從URL打開文件->samples 也可直接到kettle工具下的samples目錄打開
作業可調用作業,實現流程控制。
Kettle全局參數的使用
可以在$KETTLE_HOME/.KETTLE/kettle.properties中直接編輯、添加參數
也可以在kettle界面中添加
Kettle界面中所有帶藍色S標誌的 均可以使用參數代替
可以將加密後的值寫在參數中(密碼等) 所有參數均可以用shell、java傳入
Kettle輸出日誌說明
- 日誌輸出是檢查程序運行狀態的重要手段,是運維不可少的環節。
- Kettle在日誌輸出方面可以分級控制: 沒有日誌(Nothing)、錯誤日誌(Error)、最小日誌(Minimal)、基本日誌(Basic)、詳細日誌(Detailed)、調試日誌(Debug)、行級日誌(Rowlevel)。默認爲基本日誌(Basic)
I:步驟生成記錄數(表或文件讀入)
O:步驟輸出記錄數(輸出到表或文件)
R:從前一步驟讀取的記錄數
W:向後一步驟寫入的記錄數
U:步驟更新過的記錄數
E:步驟處理出錯的記錄數
Kettle程序腳本
- Kettle啓動腳本也分作業和轉換
- 作業啓動腳本:Kitchen.sh(or .bat)
$KETTLE_HOME/kitchen.sh (pan.sh) -rep:資源庫名稱 -user:資源庫用戶名 -pass:資源庫密碼 -dir: 資源庫中的目錄 -job(-trans):資源庫中的作業名稱 -param:傳入的參數 -param: -level=設置日誌的級別 -log=指定日誌文件 -logfile=將日誌文件寫到哪
- 轉換啓動腳本:pan.sh(or .bat)
- 加密腳本encr.sh
encr.sh加密的值以後可以直接應用在kettle的參數變量裏
- 導入腳本import.sh
${KETTLE_HOME}/import.sh
-rep:資源庫名稱
-user:資源庫用戶名
-pass:資源庫密碼
-file:導入的資源庫文件位置
-norules:Y
-dir:導入資源庫哪個目錄
-replace=true 是否替換相同名字的作業