當前位置:
首頁 > 最新 > 從入門到精通:Kettle的相關知識

從入門到精通:Kettle的相關知識

Kettle介紹

Kettle是一款國外開源的ETL工具,純java編寫,可以在Window、Linux、Unix上運行,綠色無需安裝,數據抽取高效穩定。

Kettle 中文名稱叫水壺,該項目的主程序員MATT 希望把各種數據放到一個壺裡,然後以一種指定的格式流出。

Kettle是純java開發,開源的etl工具。可以在Linux、windows、unix中運行。有圖形界面,也有命令腳本還可以二次開發。

Kettle這個ETL工具集,它允許你管理來自不同資料庫的數據,通過提供一個圖形化的用戶環境來描述你想做什麼,而不是你想怎麼做。

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

術語

1. Transformation 轉換步驟,可以理解為將一個或者多個不同的數據源組裝成一條數據流水線。然後最終輸出到某一個地方,文件或者資料庫等。

2. Job 作業,可以調度設計好的轉換,也可以執行一些文件處理(比較,刪除等),還可以 ftp 上傳,下載文件,發送郵件,執行 shell 命令等。

3. Hop 連接轉換步驟或者連接 Job(實際上就是執行順序)的連線 Transformation hop:主要表示數據的流向。從輸入,過濾等轉換操作,到輸出。

Job hop:可設置執行條件: 1,無條件執行;2,當上一個 Job 執行結果為 true 時執行;3,當上一個 Job 執行結果為 false 時執行。

產品特點與優勢

易用性:Kettle是開源軟體,有非常容易使用的 GUI,出現問題可以到社區諮詢。

技術支持:Kettle:在美國,歐洲(比利時,德國,法國,英國),亞洲(中國,日本,韓國)都可以找到相關技術支持人員。

部署:Kettle可以使用 job 作業方式或操作系統調度,來執行一個轉換文件或作業文件,也可以通過集群的方式在多台機器上部署。

速度:Kettle比Talend 快,不過也需要手工調整,對 Oracle 和 PostGre 等數據源做了優化,同時也取決於轉換任務的設計,但是Informatica最快。

數據質量:Kettle的數據轉換過程相對比較靈活,可以是通過手工編寫的SQL語句、Java代碼、正則表達式等完成數據清洗。

監控:大部分ETL工具都有監控和日誌工具,Kettle也具備,不如Informatica詳細。

連接性:Kettle非常廣泛的資料庫文件,另外可以通過插件擴展。

安裝過程介紹

通過官網下載kettle;

需求環境:kettle需要jre1.5及以上版本並進行環境變數的配置;

kettle無需安裝,下載完成後直接解壓zip文件到指定的文件夾,如果出現下屬界面證明安裝成功,否則,應從Java的環境變數配置上尋找問題。

Kettle-Spoon啟動成功界面

Kettle的集群搭建配置

集群的原理

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

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

集群的優點

和其它系統的集群一樣,有以下優點:

1)多伺服器運行,加快處理速度,對於大數據量的操作更明顯

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

集群的缺點

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

2)對網路要求高,節點之間需要不斷的傳輸數據

3)需要更多的伺服器,而且主節點沒有處理能力

適用場景

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

2)大批量處理數據的場景

集群搭建

配置主伺服器

打開ketlle目錄,找到pwd目錄,裡面有4個XML文件,分別是子伺服器的配置文件和密碼文件:

文件截圖

Carte-config-master-8080.xml是主伺服器的配置文件。編輯該文件,根據情況修改其中的namehostnameportmaster等屬性。Name是伺服器的名稱,hostname是主機名或者IP,port是埠號,Master表明是否是主伺服器。此外,加上兩行:

cluster

cluster

在Y之下

文件配置詳情

接著啟動主伺服器,在kettle目錄中打開cmd窗口,執行carte localhost8080:

執行界面

配置從伺服器

剩下的三個為從伺服器的配置文件。以carte-config-8081.xml為例。打開該文件:

文件配置詳情

發現該文件有和兩層標籤,標籤表示該伺服器要連接的主伺服器的信息,保持與carte-config-master.xml一致。標籤是從伺服器的信息,按照需要更改即可。

然後啟動slave1-8081從伺服器。

執行界面

按照同樣的方法,配置slave2-8082slave3-8083並啟動。

在spoon中創建子伺服器。

打開spoon.bat,新建一個轉換。選擇主對象樹-子伺服器,右鍵新鍵子伺服器:

新建子伺服器

把xml中的信息複製過來,保證與xml中的信息一模一樣。按照這種文件配置master slave1-8081slave2-8082。

建立集群

在主對象樹中選擇kettle集群schemas,填寫schema名稱,埠、sokects緩存大小、sockets刷新時間間隔、socketts數據是否壓縮。在右邊點擊選擇子伺服器,選擇需要的子伺服器。

Schema名稱即集群的名稱。

埠即集群對外服務的埠。

sockets緩存大小:sockets緩存。

Sockets刷新時間間隔:達到多少行記錄時刷新到子伺服器。

Sockets數據是否壓縮:如果網路狀況差,則建議選擇。網路良好時不用選擇。

選擇伺服器

執行轉換

配置完集群後,選擇轉換中的執步驟」排序記錄「,右鍵該步驟,選擇」集群」,選擇剛才配置的集群。

執行轉換

選擇然後會發現排序紀錄多出」CX2」,表示有2個子伺服器來執行。在一個三個子伺服器的集群中,主伺服器負責任務分發、結果收集,轉換任務由從伺服器執行,故只有兩個節點執行。

執行該轉換:

執行界面監控

在命令台中,主伺服器:

從伺服器1:

從伺服器2:

可以看到各個子伺服器的執行情況。

至此,集群搭建成功。

基本實現原理

基本工作流程示意圖

JOB:實際上就是kettle中的任務流,用於調用transformation和其他JOB,由entry和hop組成。

jobEntry類圖:

JobEntry類

JobEntry類執行流程

JobEntry執行流程

transform

組成部分:step 和 hop

執行流程:

step直接是通過數據流進行交換,包括一個rowMeta和一組data,其中rowMeta就是元數據,指定了每列數據的名稱和類型。

Kettle的資源庫是保存所有產生的kjb、ktr和資料庫連接等其他文件,kettle提供了文件庫和資料庫兩種方式,主要區別就是一個是直接將產生的文件保存在文件夾下,一個是保存在資料庫中。

界面

啟動成功後的界面

調用方式

Kettle家族目前主要包括四個產品:Spoon、Pan、CHEF、Kitchen

SPOON:允許你通過圖形界面來設計ETL轉換過程(Transformation)

PAN:允許你批量運行由Spoon設計的ETL轉換 (例如使用一個時間調度器)。Pan是一個後台執行的程序,沒有圖形界面。

CHEF:允許你創建任務(Job)。任務通過允許每個轉換,任務,腳本等等,更有利於自動化更新數據倉庫的複雜工作。任務通過允許每個轉換,任務,腳本等等。任務將會被檢查,看看是否正確地運行了

KITCHEN:允許你批量使用由Chef設計的任務 (例如使用一個時間調度器)。KITCHEN也是一個後台運行的程序

8、調用常式

本文在Kettle的使用教程中,重點以Spoon的圖像界面使用作說明。在Navicat for MySQL上對源資料庫進行增刪改操作,使用Kettle工具實現源數據和目標數據的同步操作。

建立觸發器:

A、在Navicat上登錄相應資料庫,選擇相應的數據表。

登錄成功界面

B、新建查詢:

C、在查詢編輯器中編輯插入操作的觸發器內容,具體如下:

drop table if exists test_temp_insert;

test_temp_insert是資料庫插入內容的臨時表,如果存在該表,首先刪除表格;

create table test_temp_insert likekettletestzhang;

建立一個表格test_temp_insert,表格結構與源數據表kettletestzhang相同;

drop trigger if exists tri_insert_testket;

tri_insert_testket是插入操作的觸發器名稱,如果存在該觸發器,首先刪除;

create trigger tri_insert_testket

after insert on kettletestzhang for each row

在kettletestzhang進行插入操作後建立觸發器,命名為tri_insert_testket,注意是「after」

begin

insert into test_temp_insert (ca_id,tradedate,capital_account_new)

values (

new.ca_id,

new.tradedate,

new.capital_account_new

);

end;

將插入的內容複製到臨時表test_temp_insert,需注意表結構;

編輯觸發器

D、觸發器測試:

觸發器完成建立後,對源數據表kettletestzhang手動插入多條數據並保存,查看臨時數據表test_temp_insert是否出現相應數據。

源數據表增加數據2條

臨時數據表增加數據2條

通過上圖可知,臨時數據表增加兩條數據,觸發器建立成功。

通過以上方式,建立刪除操作和更新操作的觸發器。

建立動態更新

A、啟動Kettle,運行Spoon.bat

啟動Kettle

啟動Kettle

Kettle啟動成功

B、在界面「主對象樹」中右鍵點擊轉換-新建

新建轉換後,進入以下界面。點開「輸入」項,選擇「表輸入」

雙擊後會出現以下界面:

命名為「test_temp_insert表輸入」,雙擊表輸入,點擊新建,如下:

新建後,進入以下界面,首先確定連接類型(MySQL)和連接方式(JNDI),再填寫其他相關信息

填寫完成後,點擊測試,如果彈出以下界面,證明資料庫連接成功

點擊瀏覽,可查看資料庫的結構

測試通過之後,點擊「確認」按鈕,返回前一個頁面,點擊「獲取sql查詢語句」:

進入以下界面,按照要求選擇需要操作的表,選中後點擊確定,點擊是:

點擊「是」後,可在SQL框里看到具體的欄位

點擊預覽,選擇預覽行數,可預覽數據。

點擊確定,輸入表建立完成。

C、選擇輸出下面的「表輸出」,雙擊「插入更新」,然後點擊新建按鈕,如同表輸入一樣填寫相關信息,並測試。

建好之後,按住shift從表輸入拉一條線到表輸出如下:

雙擊「表輸出」,步驟名稱命名為「kettletestzhangbackup目標表插入 / 更新」,目標表名可以自己起名(一般為要導的資料庫沒有創建表),也可以選擇(要導的資料庫已經建好表,導入數據),並填寫獲取相關信息。

點擊「SQL」按鈕, 點擊執行(這部為創建數據表,如果數據表在要導入的庫里已存在,可以省略)

點擊確定

D、建立「清除臨時表」流程:

與「插入更新」選項連接,確定為「主輸出步驟」,並填寫相關信息

E、參考操作A—D分別建立數據表刪除、數據表修改的轉換操作。

F、新建作業,

在通用下面選擇START,雙擊後設置如下:

在通用下面選擇轉換,雙擊後,選擇相應的轉換流程

建立三個轉換,將增加、刪除、修改三個操作流程分別設置,在通用下面選擇「成功」,並連接。

常式結果

前面所述的案例中需要將資料庫kettle_test_b中的kettletestzhang表中發生變化的記錄對應的更新到同資料庫的kettletestzhangbackup。

點擊三角,開始運行:

人工對源數據表kettletestzhang進行增加、修改、刪除操作,查看目標數據表的變化。

增加:

監控界面:

通過對比源資料庫和目標資料庫,可發現,兩個表已實現動態更新。

應用場景

表視圖模式:這種情況我們經常遇到,就是在同一網路環境下,我們對各種數據源的表數據進行抽取、過濾、清洗等,例如歷史數據同步、異構系統數據交互、數據對稱發布或備份等都歸屬於這個模式;傳統的實現方式一般都要進行研發(一小部分例如兩個相同表結構的表之間的數據同步,如果sqlserver資料庫可以通過發布/訂閱實現),涉及到一些複雜的一些業務邏輯如果我們研發出來還容易出各種bug;

前置機模式:這是一種典型的數據交換應用場景,數據交換的雙方A和B網路不通,但是A和B都可以和前置機C連接,一般的情況是雙方約定好前置機的數據結構,這個結構跟A和B的數據結構基本上是不一致的,這樣我們就需要把應用上的數據按照數據標準推送到前置機上,這個研發工作量還是比較大的;

文件模式: 數據交互的雙方A和B是完全的物理隔離,這樣就只能通過以文件的方式來進行數據交互了,例如XML格式,在應用A中我們開發一個介面用來生成標準格式的XML,然後用優盤或者別的介質在某一時間把XML數據拷貝之後,然後接入到應用B上,應用B上在按照標準介面解析相應的文件把數據接收過來;、

https://www.cnblogs.com/gala1021/p/7814712.html

總結來說,主要分為以下幾個方面:

1、在不同應用或資料庫之間整合數據

2、把資料庫中的數據導出到文本文件

3、大批量數據裝載入資料庫

4、數據清洗

5、集成應用相關項目適合使用


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 大快搜索 的精彩文章:

TAG:大快搜索 |