從入門到精通: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:大快搜索 |