How to Set Kettle Cluster Schemas
本節首先說明 Kettle 中三種執行 ETL 作業的方式。接著會說明如何透過設定 Kettle Cluster Schemes 以集群式執行 ETL 作業。
Kettle 執行 ETL 模式
在 Kettle 中,執行 ETL 作業可以有三種模式:
- Local execution
- Execute Remotely
- Execute Clustered (集群式執行)
而在執行 ETL 作業時,可選擇以何種方式執行,如下圖所示。本節接下來說明如何使用 Execute Clustered 模式。
Carte Service
Carte 是 Kettle 集群式運行不可或缺的功能。依文件所言:
Carte is a simple web server that allows you to execute transformations and jobs remotely.
可知 Carte 是用來執行遠端 ETL 作業的網路服務。Carte 服務必須先在遠端執行 ETL 作業的伺服器 (Slave Server) 啟動。開啟方式依 Linux 與 Windows 系統而有不同:
透過系統的 command-line interface (CLI) 進入 Kettle 的資料夾後,在 Linux (含OSX) 需以carte.sh ip_address port_number
開啟服務; Windows 則是以carte.bat ip_address port_number
開啟服務。ip_address 與 port_number 是 Slave Server 的 ip 位址與服務的埠號。
另一種開啟服務的方式,是先定義 Slave Server 的 configuration 檔案,設定範例如連結。再透過carte.sh /path/to/cogifuration.xml
(Linux) 或 carte.bat /path/to/cogifuration.xml
(Windows) 開啟服務。
Set Kettle Slave Server
首先在 Kettle 中,需設定 Slave server。設定方式如下圖,在 View 的 Slave server 點選 New 或直接點兩下。
接著設定 Slave server,設定範例如下圖。主要設定 Server name (最好可直接看出 ip 位址、port、與是不是 Master) 、IP address、Port。 Username 與 Password 是 Carte 存取網路服務的設定資訊 。預設皆為 cluster。若要修改可參考連結中 Basic Authentication 的部分。最後,因為 Kettle 的集群式為主從式架構,故需指定 Slaver server 是否為 Master,若是,則勾選 Is the master。
最後本例設定四個 Server (1個 Master + 3個 Slaves),IP address 皆為 localhost,port 分別為 8080 到 8083,如下圖所示。
Set Kettle Cluster Schemas
在 Kettle 中,在 View 的 Kettle cluster schemas 點選 New 或直接點兩下。
在設定中,首先命名此集群。接著點選 Select slave servers 新增欲加入此集群的 Servers。結果如下圖。設定完成後,Kettle Cluster Schemas 就會有此集群的資訊。
Set Executing Clustered
接下來設定以集群式執行 ETL 作業。本例修改自 sample 中的 Generate radom value - all usecases。流程如下圖。本步驟為亂數產生資料,之後再進行排序。Generate Rows 與 Generate random value 皆在 Input 下。Sort rows 在 Transformation 下。
設定 Generate Rows,Limit 可設定要產生的資料筆數,如下圖所示,本例產生一百萬筆資料。此外,因本例是產生亂數變數,故 Fields 部分不需要設定。若有需產生固定值變數,可在 Fields 設定。
設定 Generate random value,如下圖。共產生四個變數A到D,Type為可設定格式,其說明可見文件。
設定 Sort rows,如下圖。以變數A做遞增排序。
接著,因為本例要針對 Sort rows 進行集群式執行。故以右鍵點選此步驟,點選 Clusterings...,之後選擇前面所設定 Kettle Cluster Schemas。如下兩圖所示。
若成功,則 Sort rows 圖示右上方會出現 Cx(slave servers 數目),如本小節第一張圖。
在執行 ETL 前,需將 Carte 服務開啟,因本例的 ip 位址皆為 localhost,故進入 Kettle 資料夾中,以carte.sh localhost port_number
(port_number 為8080到8083),依序開啟 Slave Server 的 Carte 服務。
在 Kettle 中,以 Execute Clustered 執行,在設定時可勾選 show transformations,如下圖。執行後可查看各 slave server 的執行狀況。
Dynamic Clusters
Dynamic clusters 是指 Kettle Cluster Schemas 建立集群後,在實際執行 ETL 時,會依此集群中可使用的 Slave servers 運行,達到高可用性 (High Avaibility)。
設定方式為在建立 Kettle Cluster Schemas 勾選 Dynamic cluster,如下圖所示,即可建立。
將集群設定為 Dynamic Cluster 後,以集群模式運行的步驟右上方會顯示 CxN,如下圖所示。
必須注意的是,若要以 Dynamic Cluster 執行 ETL 作業,Carte 服務一定要使用 carte.sh /path/to/cogifuration.xml
(Windows 則為 carte.bat
) 開啟。
為進行測試,本次不將 port number 為8082的 slave server 開啟。 實際運行後,結果如下三圖。可看出此次 Sort rows 只有兩台 slave servers 執行,分別為8081與8083。