1. 程式人生 > >Kettle叢集介紹及(Windows、Linux)環境搭建

Kettle叢集介紹及(Windows、Linux)環境搭建

一、Kettle叢集概述


1)  Kettle叢集簡介
   叢集技術可以用來水平擴充套件轉換,使得他們能夠同時執行在多臺伺服器上。它將轉換的工作量均分到不同的伺服器上。一個集     群schema由一臺主伺服器,和一些子伺服器組成,主伺服器作為一個叢集的控制器。簡單的說,我們提到的Carte控制伺服器       就是主伺服器,其他的Carte伺服器就是子伺服器。

2)Kettle叢集的原理

Kettle叢集是由一個主carte伺服器和多個從carte伺服器組成的,類似於master-slave結構,不同的是’master’處理具體任務,只負責任務的分發和收集執行結果。

Master carte結點收到請求後,把任務分成多個部分交給slave carte執行,slave執行完畢後把結果交給master 進行彙總,再由master返回結果。

3)  Kettle叢集優劣勢
叢集的優點
和其它系統的叢集一樣,有以下優點:

        1)多伺服器執行,加快處理速度,對於大資料量的操作更明顯。

        2)防單點失敗,一臺伺服器故障後其它伺服器還可以執行。

叢集的缺點
         1)採用主從結構,不具備自動切換主從的功能。所以一旦主節點宕機,整個系統不可用。

         2)對網路要求高,節點之間需要不斷的傳輸資料。

         3)需要更多的伺服器,而且主節點沒有處理能力(在該步驟沒有處理能力,在其他的沒有使用叢集功能的步驟仍具有處理能力)。

適用場景:

         1)需求kettle能時刻保持正常執行的場景。

         2)大批量處理資料的場景。

二、Kettle叢集部署方案


1)  Window本機部署三節點叢集
Window本機部署只適用於本地開發環境。它作為一個偽叢集方式進行部署,採用的一個kettle安裝檔案且用不同的埠進行叢集部署。首先採用的環境是Win10,kettle版本採用的5.4.0,jdk採用的1.8.0_91。(當然,首先需要配置java環境變數,保證kettle正常啟動)

1.首先確認本機是否有tomcat執行,因為kettle叢集的master預設採用8080埠,這和tomcat的預設埠是衝突的,當然可以進行埠修改,自定義使用埠。

2.開啟kettle的安裝目錄,進入到data-integration->pwd目錄,找到carte-config-master-8080.xml檔案。

3.開啟carte-config-master-8080.xml檔案,如下圖。該檔案主要是進行master主機配置。

注意:在本機部署的叢集環境中,建議hostname填localhost,因為開發者很多會在本機安裝虛擬機器,虛擬機器NAT網路連線會修改本地的ip地址,如果是熟練使用wmware等虛擬機器軟體的開發者,請忽略。

4.carte-config-8081.xml檔案是子伺服器的配置檔案。開啟該檔案,如下圖。其中masters中,name、hostname、port需要和carte-config-master-8080.xml中完全一致。然後,同樣修改carte-config-8082.xml檔案。

注意:username和password並不是指主機的登陸賬號和密碼,是叢集的賬號密碼,該賬號密碼是叢集連線的依據,賬號密碼是通過混淆的方式儲存在pwd檔案,kettle預設的賬號密碼是cluster/cluster,所以,在本機開發的時候,為了方便,賬號密碼都不用修改,都使用cluster即可。

 

5.叢集啟動。在開始選單中啟動命令提示符(管理員),進入到data-integration目錄下,輸入carte.bat pwd\carte-config-master-8080.xml,啟動master節點。

注意:啟動時,出現attemping to load ESAPI.properties等提示為kettle出現的bug,暫時未發現解決方法。

然後,再開啟一個命令提示符的視窗,進入到data-integration目錄下,執行命令carte.batpwd\carte-config-8081.xml,則啟動8081埠的子伺服器。重複動作,啟動8082埠的子伺服器。

在啟動了三臺叢集伺服器之後,在瀏覽器中輸入localhost:8080,進入到頁面如下:輸入cluster/cluster,進入到頁面如下:

 

表示主節點已經啟動完畢。輸入localhost:8081及localhost:8082檢視子伺服器狀態。

到此,windows本機三節點叢集部署完畢。

2)  windows呼叫linux環境叢集組
由於大多數kettle叢集開發採用windows本地開發,然後叢集環境在linux上。因此,則需要在此環境進行開發,測試及部署。

此文件的開發環境是:Centos7、kettle5.4.0、jdk1.9.0、本機為win10。

網路連線為:

本機:Vmnet8設定192.168.10.100

叢集Master:192.168.10.101

叢集Slave1:192.168.10.102

叢集Slave2:192.168.10.103

需要在centos7上安裝好jdk,配置好環境變數,並且把kettle安裝好。(kettle不需要啟動spoon來啟動圖形介面,利用kitchen除錯好即可,linux上安裝kettle網上有很多教程,自行查閱即可)

注意:在叢集執行環境中,需要埠開啟或者直接關閉防火牆,供主伺服器及子伺服器互相連通通訊,在centos7中,放火牆採用firewalld的方式,和以前的iptable不一樣,檢查埠是否開通,可以通過本機進行telnet測試。Centos7防火牆配置見筆記。

首先,像windows開發環境一樣,配置pwd中的carte-config-master-8080.xml、carte-config-8081.xml和carte-config-8082.xml檔案,配置檔案見下圖:

注意:再次宣告,配置檔案中的username和password並不是指主機的登陸賬號和密碼,是叢集的賬號密碼,該賬號密碼是叢集連線的依據,賬號密碼是通過混淆的方式儲存在pwd檔案,kettle預設的賬號密碼是cluster/cluster,修改該賬號密碼需要修改pwd檔案。

注意:該環境將master、slave1、slave2的pwd的三個配置檔案都修改了,並且都修改的一樣。理論上是master修改carte-config-master-8080.xml、slave1修改carte-config-8081.xml、slave2修改carte-config-8082.xml即可。如果不修改出現了cannotconnet的報錯,請三臺linux系統中的pwd配置檔案都進行修改。

 

啟動master。在master的虛擬機器(192.168.10.101)中,進入到data-integration目錄下,執行./carte.sh192.168.10.101 8080。啟動服務,啟動192.168.10.101為carte-config-master-8080.xml設定的ip,8080為carte-config-master-8080.xml設定埠。

注意:啟動時,出現attemping to load ESAPI.properties等提示為kettle出現的bug,暫時未發現解決方法。

   啟動之後,在瀏覽器輸入192.168.10.101:8080,出現如下圖:

輸入cluster/cluster,登陸進入。

表示master啟動成功。

啟動slave1,在salve1(192.168.10.102)中,進入到data-integration目錄下,執行./carte.sh192.168.10.102 8081。

啟動之後,在瀏覽器輸入192.168.10.102:8081,輸入cluster/cluster出現如下圖:

 表示slave1啟動成功。

啟動slave2,在salve2(192.168.10.103)中,進入到data-integration目錄下,執行./carte.sh192.168.10.103 8082。

啟動之後,在瀏覽器輸入192.168.10.102:8081,輸入cluster/cluster出現如下圖:

表示slave2啟動成功。

在windows本機新建子伺服器及叢集。在主物件樹中新建子伺服器,配置分別如下圖:

 在主物件樹中,在“kettle叢集schmas”中右鍵,新建,點選“選擇子伺服器”,新增剛才新建的子伺服器,然後確定。

到此,叢集搭建完畢。

  叢集遠端執行開發。在kettle開發中,通常是需要遠端呼叫測試環境的kettle叢集來進行開發測試的。現在,叢集環境在linux環境,採用遠端執行的方式進行執行設計好的帶有叢集的kettle程式碼。

點選執行,選擇遠端執行,選擇遠端主機為master,然後啟動。

出現如下介面:

重新整理下192.168.10.101:8080、192.168.10.102:8081和192.168.10.103:8083頁面,出現如下頁面

如上圖所見,排序記錄被salve1和salve2分開執行了,表示,叢集執行無誤。

三、Kettle叢集開發


kettle叢集開發的方式,是通過job及trans開發過程中使用叢集的方式。子伺服器中新建三個子伺服器。

1)  trans叢集開發
在主物件樹子伺服器中右鍵,新建,填寫伺服器連線資訊

注意:該部分配置資訊需要和carte-config-m、aster,-8080.xml配置資訊一致,由於是主伺服器,需要勾選最後一欄。

然後填寫兩個子伺服器資訊,需要和carte-config-master-8081.xml和carte-config-master-8082.xml中的資訊一致。

在主物件樹中的kettle叢集Schemas,右鍵,新建,選擇子伺服器,將剛剛配置好的三臺子伺服器新增到Schemas中。

然後點選確定,這樣trans中的叢集配置就完成了。

然後為了測試,做了一個trans進行叢集測試,如下圖。在排序的時候右鍵,選擇叢集,選擇配置好的叢集,該步驟右上方會有一個Cx2標識,表示有兩臺子伺服器的叢集。

點選“執行”,選擇“提交轉換”、“準備執行”、“開始執行”,“顯示轉換”如果選擇則會在spoon中顯示相應的執行日誌。

在trans執行過程中,重新整理開啟的localhost:8080/kettle/status和localhost:8081/kettle/status和localhost:8082/kettle/status,會發現我們剛才做的trans正在執行。

執行的日誌同樣也可以在命令提示符中可以檢視。

2)  job叢集開發
job的叢集開發,並不是和trans一樣,job的叢集開主要是將trans分配到不同的子伺服器中執行。

首先配置子伺服器的方法和trans一樣,如下圖:

在轉換的步驟,高階選項,選擇遠端從伺服器,選擇要執行的伺服器,確定,即可。

   注:如果trans是需要在在叢集的環境下執行,則需要勾選上面的“在叢集模式下執行這個轉換”。

四、Kettle叢集筆記


1)  Centos7防火牆開埠
Centos7放火牆功能由iptables替換為firewalld。在firewalld的各種服務裡,是以區域為定義進行設定的,設定的區域和網路介面關聯起來生效。

防火牆的開啟/關閉

#systemctl start firewalld

#systemctl enable firewalld

停止Firewalld,及關閉開機自啟。

# systemctl stop firewalld

# systemctl disable firewalld

開啟埠

firewall-cmd –zone=public –add-port=80/tcp –permanent(-permanent是永久開放埠,沒有該配置在重啟後開啟埠失效。)

檢視開啟埠

firewall-cmd --list-all

開啟埠之後建議重啟放火牆

2)  Cater安全-賬號密碼設定
在上面提到pwd資料夾中的master等配置檔案中的username和password預設是cluster/cluster,如果需要修改密碼,則需要到pwd資料夾中的kettle.pwd檔案修改引數。

如圖:在pwd檔案中,第一未註釋的行是cluster的賬號密碼。其中加了OBF的意思是字串是被混淆了的(但是並不等同於加密)。

如果要新建一個賬號密碼。則只需要在下面另起一行以username:password的形式新增即可,如圖。

如果需要進行混淆,可以利用kettle自帶的encr工具來進行混淆。