Kettle基礎使用 原

Kettle 中文名稱叫水壺,該項目的主程序員MATT 希望把各種數據放到一個壺裏,然後以一種指定的格式流出。Kettle這個ETL工具集,它允許你管理來自不同數據庫的數據,通過提供一個圖形化的用戶環境來描述你想做什麼,而不是你想怎麼做。

Kettle中有兩種腳本文件,transformation和job,transformation完成針對數據的基礎轉換,job則完成整個工作流的控制

目錄

  • Kettle組件類型基本說明tans/job
  • Kettle大數據組件的應用說明
  • 基於表對錶的同步
  • 基於表到hdfs的同步
  • 基於文件到hdfs的同步
  • 基於表到hive的同步
  • 基於表到hbase的同步
  • 基於文件到hbase的同步
  • 基於表到phoenix的同步
  • Kettle中sqoop的調用
  • Kettle中JavaScript的基本應用
  • 作業調用作業及轉換
  1. 如需運用大數據組件 需要將如下:
  • 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的同步

  1. 從集羣拷貝 phoenix-core-xxx.jar phoenix-xxx-client.jar這兩個文件到如下路徑$KETTLE_HOME/lib/
  2. 添加數據庫連接方式
  3. 如果存在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 是否替換相同名字的作業

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章