目錄
Kettle裏有不同的工具,用於ETL的不同階段。主要工具如下:
- Spoon:圖形化工具,用於快速設計和維護複雜的ETL工作流。
- Kitchen:運行作業的命令行工具。
- Pan:運行轉換的命令行工具。
- Carte:輕量級的(大概1MB)Web服務器,用來遠程執行轉換或作業,一個運行有Carte進程的機器可以作爲從服務器,從服務器是Kettle集羣的一部分。
1. Spoon
Spoon是Kettle的集成開發環境(IDE)。它基於SWT提供了圖形化的用戶接口,主要用於ETL的設計。
在Kettle安裝目錄下,有啓動Spoon的腳本。如Windows下的Spoon.bat,類UNIX下的spoon.sh。Windows用戶還可以通過執行Kettle.exe啓動Spoon。Spoon的屏幕截圖如圖1所示。
圖1裏可以清楚地看到Spoon的主窗口:主窗口上方有一個菜單條,下方是一個左右分隔的應用窗口。右方面板裏有多個標籤面板,每個標籤面板都是一個當前打開的轉換或作業。左方面板是一個樹狀結構步驟或作業項視圖。
右方的工作區又可以分爲上下兩個部分:上面的部分是畫布,可以通過拖拽圖標在這裏設計作業或轉換。圖1的當前選中的畫布標籤裏顯示了一個設計好的轉換。
設計作業或轉換的過程實際就是往畫布裏添加作業項或轉換步驟的圖標這麼簡單,向畫布添加圖標的方式爲,從左側的樹中拖拽。這些作業項和轉換步驟通過跳來連接。跳就是從一個作業項/步驟的中心連接到另一個作業項/步驟的一條線。在作業裏跳定義的是控制流,在轉換裏跳定義的是數據流。
工作區左側的樹有“主對象樹”和“核心對象”兩個標籤,主對象樹將當前打開的作業或轉換裏的所有作業項或步驟以樹狀結構展現。設計者可以在這裏快速地找到某個畫布上的步驟、跳或數據庫連接等資源。核心對象中包含Kettle中所有可用的作業項或步驟,可以在搜索框中輸入文本查找名稱匹配的作業項或步驟。
一些調試作業/轉換的工具也集成到了Spoon的圖形界面裏,設計者可以在IDE裏直接調試作業/轉換。這些調試功能按鈕在畫布上方的工具欄裏。
工作區下方的面板是運行結果面板,運行結果面板裏除了顯示運行結果還顯示運行時日誌和運行監控。
2. Kitchen和Pan
作業和轉換可以在圖形界面裏執行,但這只是在開發、測試和調試階段。在開發完成後,需要部署到實際運行環境中,在部署階段Spoon就很少用到了。
部署階段一般需要通過命令行執行,需要把命令行放到Shell腳本中,並定時調度這個腳本。Kitchen和Pan命令行工具就是用於這個階段,用於實際的生產環境。
Kettle的Kitchen和Pan工具是Kettle的命令行執行程序。實際上,Pan和Kitchen只是在Kettle執行引擎上的封裝。它們只是解釋命令行參數,調用並把這些參數傳遞給Kettle引擎。
Kitchen和Pan在概念和用法上都非常相近,這兩個命令的參數也基本是一樣的。唯一不同的是Kitchen用於執行作業,Pan用於執行轉換。在使用命令行執行作業或轉換時,需要重點考慮網絡傳輸的性能。Kettle數據流將數據作爲本地行集緩存。如果數據源和目標之間需要通過網絡傳輸大量數據,將Kettle部署於源或目標服務器上會極大提升性能。
Kitchen和Pan都通過腳本的方式啓動,在Windows系統下,腳本名稱是Kitchen.bat和Pan.bat,在類UNIX系統下,腳本名稱是Kitchen.sh和Pan.sh。在執行這些腳本以及Kettle帶的其它腳本時,要把Kettle目錄切換爲控制檯的當前目錄。類UNIX系統的腳本默認情況下是不能執行的,必須使用chmod目錄使腳本可執行。
Kettle是用Java語言開發的,因此在使用Kettle命令行時需要注意匹配Java版本。例如Kettle8.2.0版本需要JDK 1.8的支持。這樣就能在Spoon的圖形界面下進行設計開發調試,然後用命令行執行保存的轉換或作業(.ktr或.kjb文件),秉承Java程序一次編譯到處運行的理念。
(1)命令行參數
Kitchen和Pan的命令行包含了很多參數,在不使用任何參數的情況下,直接運行Kitchen和Pan會列出所有參數的幫助信息。參數的語法規範如下:
[/-]name [[:=]value]
參數以斜線(/)或橫線(-)開頭,後面跟參數名。大部分參數名後面都要有參數值。參數名和參數值之間可以是冒號(:)或等號(=),參數值裏如果包含空格,參數值必須用單引號(')或雙引號(")引起來。
作業和轉換的命令行參數非常相似,這兩個命令的參數可以分爲下面幾類:
- 指定作業或轉換
- 控制日誌
- 指定資源庫
- 列出可用資源庫和資源庫內容。
表1列出了Pan和Kitchen共有的命令行參數。
參數名 |
參數值 |
作用 |
norep |
|
|
rep |
資源庫名稱 |
要連接的資源庫的名稱 |
user |
資源庫用戶名 |
要連接的資源庫的用戶名 |
pass |
資源庫用戶密碼 |
要連接的資源庫的用戶密碼 |
listrep |
|
顯示所有的可用資源庫 |
dir |
資源庫裏的路徑 |
制定資源庫路徑 |
listdir |
|
列出資源庫的所有路徑 |
file |
文件名 |
指定作業或轉換所在的文件名 |
level |
Error|Nothing|Basic|Detailed|Debug|Rowlevel |
指定日誌級別 |
logfile |
日誌文件名 |
指定要寫入的日誌文件名 |
version |
|
顯示Kettle的版本號、build日期 |
表1
儘管Kitchen和Pan命令的參數名基本相同,但這兩個命令裏的dir參數和listdir參數的含義有一些區別。對Kitchen而言,dir和listdir參數列出的是作業的路徑,Pan命令裏的這兩個參數列出的是轉換路徑。
除了共有的命令行參數外,Kitchen和Pan自己特定的命令行參數分別見表2、表3。
參數名 |
參數值 |
作用 |
jobs |
作業名 |
指定資源庫裏的一個作業名 |
listdir |
|
列出資源庫裏的所有作業 |
表2
參數名 |
參數值 |
作用 |
trans |
轉換名 |
指定資源庫裏的一個轉換名 |
listtrans |
|
表列出資源庫裏的所有轉換 |
表3
(2)例子
# 列出所有有效參數
Kettle-home> ./kitchen.sh
# 運行一個存儲在文件中的作業
Kettle-home> ./kitchen.sh /file:/home/foo/daily_load.kjb
# 運行一個資源庫裏的作業
Kettle-home> ./kitchen.sh /rep:pdirepo /user:admin /pass:admin /dir:/ /job:daily_load.kjb
# 運行一個存儲在文件中的轉換
./pan.sh -file:/home/mysql/MongoDB_to_MySQL.ktr
3. Carte
Carte服務用於執行一個作業,就想Kitchen一樣。但和Kitchen不同的是,Carte是一個服務,一直在後臺運行,而Kitchen只是運行一個作業就退出。
當Carte在運行時,一直在某個端口監聽HTTP請求。遠程機器客戶端給Carte發出一個請求,在請求裏包含了作業的定義。當Carte接到了這樣的請求後,它驗證請求並執行請求裏的作業。Carte也支持其它幾種類型的請求。這些請求用於獲取Carte的執行進度、監控信息等。
Carte是Kettle集羣中一個重要的構建快。集羣可將單個工作或轉換分成幾部分,在Carte服務器的多個計算機上並行執行,因此可以分散工作負載。
關於Carte以及Kettle集羣的配置和使用,參見“Pentaho Work with Big Data(八)—— kettle集羣”