kettle的基本介绍
Kettle
主要內容:
一.ETL介紹
二.Kettle介紹
三.Java調用Kettle?API
一、ETL介紹
1.?ETL是什么?
????1).ETL分別是“Extract”、“?Transform”?、“Load”三個單詞的首字母縮寫也即數據抽取、轉換、裝載的過程,但我們日常往往簡稱其為數據抽取。
ETL包含了三方面:
Extract(抽取):將數據從各種原始的業務系統中讀取出來,這是所有工作的前提。一般抽取過程需要連接到不同的數據源,以便為隨后的步驟提供數據。這一部分看上去簡單而瑣碎,實際上它是?ETL?解決方案的成功實施的一個主要障礙。
Transform(轉換):按照預先設計好的規則將抽取得數據進行轉換,使本來異構的數據格式能統一起來。任何對數據的處理過程都是轉換。這些處理過程通常包括(但不限于)下面一些操作:
移動數據
根據規則驗證數據
數據內容和數據結構的修改
將多個數據源的數據集成
根據處理后的數據計算派生值和聚集值
Load(裝載):將轉換完的數據按計劃增量或全部導入到數據倉庫中。也就是說將數據加載到目標系統的所有操作。
???2).ETL是數據抽取(Extract)、清洗(Cleaning)、轉換(Transform)、裝載(Load)的過程。是構建數據倉庫的重要一環,用戶從數據源抽取出所需的數據,經過數據清洗,最終按照預先定義好的數據倉庫模型,將數據加載到數據倉庫中去。
???3).ETL是BI/DW(?Business?Intelligence/Data?Warehouse?,?商務智能/數據倉庫)的核心和靈魂,按照統一的規則集成并提高數據的價值,是負責完成數據從數據源向目標數據倉庫轉化的過程,是實施數據倉庫的重要步驟。
????DW(Data?Warehouse)即數據倉庫:這個概念是由被譽為“數據倉庫之父”的WilliamH.Inmon博士提出的:數據倉庫是一個面向主題的、集成的、隨時間變化的、信息相對穩定的數據集合,它用于對企業管理和決策提供支持。
???『
主題:是指用戶使用數據倉庫進行決策時所關心的重點方面;
集成:是指數據倉庫中的信息是經過一系列加工、整理和匯總的過程;
隨時間變化:記錄過去某一時點到當前各個階段的信息;
相對穩定:數據進入數據倉庫以后,一般很少進行修改,更多的是相對信息的查詢操作。
???』
BI(Business?Intelligence)即商務智能,它是一套完整的解決方案,用來將企業中現有的數據進行有效的整合,快速準確的提供報表并提出決策依據,幫助企業做出明智的業務經營決策。
2.?ETL在BI/DW核心的體現
?????ETL的作用整個BI/DW系統由三大部分組成:數據集成、數據倉庫和數據集市、多維數據分析。通常,商務智能運作所依靠的信息系統是一個由傳統系統、不兼容數據源、數據庫與應用所共同構成的復雜數據集合,各個部分之間不能彼此交流。從這個層面看:目前運行的應用系統是用戶花費了很大精力和財力構建的、不可替代的系統,特別是系統的數據。而新建的商務智能系統目的就是要通過數據分析來輔助用戶決策,恰恰這些數據的來源、格式不一樣,導致了系統實施、數據整合的難度。此時,非常希望有一個全面的解決方案來解決用戶的困境,解決數據一致性與集成化問題,使用戶能夠從已有傳統環境與平臺中采集數據,并利用一個單一解決方案對其進行高效的轉換。這個解決方案就是ETL。?
ETL是BI/DW的核心和靈魂,按照統一的規則集成并提高數據的價值,是負責完成數據從數據源向目標數據倉庫轉化的過程,是實施數據倉庫的重要步驟。如果說數據倉庫的模型設計是一座大廈的設計藍圖,數據是磚瓦的話,那么ETL就是建設大廈的過程。在整個項目中最難部分是用戶需求分析和模型設計,而ETL規則設計和實施則是工作量最大的,其工作量要占整個項目的60%-80%,這是國內外專家從眾多實踐中得到的普遍共識。
用戶的數據源分布在各個子系統和節點中,利用ETL將各個子系統上的數據,通過自動化FTP或手動控制傳到UNIX或NT服務器上,進行抽取、清洗和轉化處理,然后加載到數據倉庫。因為現有業務數據源多,保證數據的一致性,真正理解數據的業務含義,跨越多平臺、多系統整合數據,最大可能提高數據的質量,迎合業務需求不斷變化的特性,是ETL技術處理的關鍵。
3.??ETL過程中實現數據清洗的實現方法
????首先,在理解源數據的基礎上實現數據表屬性一致化。為解決源數據的同義異名和同名異義的問題,可通過元數據管理子系統,在理解源數據的同時,對不同表的屬性名根據其含義重新定義其在數據挖掘庫中的名字,并以轉換規則的形式存放在元數據庫中,在數據集成的時候,系統自動根據這些轉換規則將源數據中的字段名轉換成新定義的字段名,從而實現數據挖掘庫中的同名同義。
????其次,通過數據縮減,大幅度縮小數據量。由于源數據量很大,處理起來非常耗時,所以可以優先進行數據縮減,以提高后續數據處理分析效率。
????最后,通過預先設定數據處理的可視化功能節點,達到可視化的進行數據清洗和數據轉換的目的。針對縮減并集成后的數據,通過組合預處理子系統提供各種數據處理功能節點,能夠以可視化的方式快速有效完成數據清洗和數據轉換過程。
4.?ETL工具介紹
ETL的工具功能:必須對抽取到的數據能進行靈活計算、合并、拆分等轉換操作。
目前,ETL工具的典型代表有:
商業軟件:Informatica、IBM?Datastage、Oracle?ODI、Microsoft?SSIS…
開源軟件:Kettle、Talend、CloverETL、Ketl,Octopus?…
二.Kettle介紹
1.?Kettle的今生前世
????Kettle?是?PDI?以前的名稱,PDI?的全稱是Pentaho?Data?Integeration,Kettle?本意是水壺的意思,表達了數據流的含義。
????Kettle?的主作者是?Matt?,他在?2003?年就開始了這個項目,在?PDI?的代碼里就可以看到最早的日期大概在2003年4月。?從版本2.2開始,?Kettle?項目進入了開源領域,并遵守?LGPL?協議。
在?2006年?Kettle?加入了開源的?BI(Business?Intelligence)?組織?Pentaho,?正式命名為PDI,?加入Pentaho?后Kettle?的發展越來越快了,并有越來越多的人開始關注它了。
2.?什么是Kettle?
Kettle是一款國外開源的ETL工具,純java編寫,可以在Window、Linux、Unix上運行,綠色無需安裝,數據抽取高效穩定。
Kettle?中文名稱叫水壺,該項目的主程序員MATT?希望把各種數據放到一個壺里,然后以一種指定的格式流出。
Kettle這個ETL工具集,它允許你管理來自不同數據庫的數據,通過提供一個圖形化的用戶環境來描述你想做什么,而不是你想怎么做。
Kettle中有兩種腳本文件,transformation和job,transformation完成針對數據的基礎轉換,job則完成整個工作流的控制。
作為Pentaho的一個重要組成部分,現在在國內項目應用上逐漸增多。
Kettle?:Kettle?is?an?acronym?for?“Kettle?E.T.T.L.?Environment”.?This?means?it?has?been?designed?to?help?you?with?your?ETTL?needs:?the?Extraction,?Transformation,?Transportation?and?Loading?of?data
???Kettle?是”Kettle?E.T.T.L.?Envirnonment”只取首字母的縮寫,這意味著它被設計用來幫助你實現你的ETTL?需要:抽取、轉換、裝入和加載數據;翻譯成中文名稱應該叫水壺,名字的起源正如該項目的主程序員MATT?在一個論壇里說的哪樣:希望把各種數據放到一個壺里然后以一種指定的格式流出。
3.?Kettle的安裝與運行
1>.?下載安裝
???可以從?http://kettle.pentaho.org?下載最新版的?Kettle軟件?,同時,Kettle?是綠色軟件,下載后,解壓到任意目錄即可。?由于Kettle?是采用java?編寫,因此需要在本地有JVM?的運行環境,我們所使用的Kettle的最新版本是5.1?的。安裝完成之后,點擊目錄下面的kettle.exe?或者spoon.bat?即可啟動kettle?。在啟動kettle?的時候,會彈出對話框,讓用戶選擇建立一個資源庫。
?????資源庫:是用來保存轉換任務的,?它用以記錄我們的操作步驟和相關的日志,轉換,JOB?等信息。用戶通過圖形界面創建的的轉換任務可以保存在資源庫中。資源庫可以是各種常見的數據庫,用戶通過用戶名/?密碼來訪問資源庫中的資源,默認的用戶名/?密碼是admin/admin.?資源庫并不是必須的,如果沒有資源庫,用戶還可以把轉換任務保存在?xml?文件中。
2>.?配置Kettle的環境變量:(前提是配置好Java的環境變量,因為他是java編寫,需要本地的JVM的運行環境)在系統的環境變量中添加KETTLE_HOME變量,目錄指向kettle的安裝目錄:D:\kettle\data-integration(具體以安裝路徑為準)
新建系統變量:KETTLE_HOME
變量值:?D:\kettle\data-integration(具體以安裝路徑為準,Kettle的解壓路徑,直到Kettle.exe所在目錄)
選擇PATH添加環境變量:
變量名:PATH??
變量值:%?KETTLE_HOME%;?
3.?Kettle的基本概念
1).?作業(job),負責將[轉換]組織在一起進而完成某一塊工作,通常我們需要把一個大的任務分解成幾個邏輯上隔離的作業,當這幾個作業都完成了,也就說明這項任務完成了。
1>.?Job?Entry:一個Job?Entry?是一個任務的一部分,它執行某些內容。
2>.?Hop:一個Hop?代表兩個步驟之間的一個或者多個數據流。一個Hop?總是代表著兩個Job?Entry?之間的連接,并且能夠被原始的Job?Entry?設置,無條件的執行下一個Job?Entry,
直到執行成功或者失敗。
3>.?Note:一個Note?是一個任務附加的文本注釋信息。
?
2).?轉換(Transformation),定義對數據操作的容器,數據操作就是數據從輸入到輸出的一個過程,可以理解為比作業粒度更小一級的容器,我們將任務分解成作業,然后需要將作業分解成一個或多個轉換,每個轉換只完成一部分工作。
1>.?Value:Value?是行的一部分,并且是包含以下類型的的數據:Strings、floating?point?Numbers、unlimited?precision?BigNumbers、Integers、Dates、或者Boolean。
2>.?Row:一行包含0?個或者多個Values。
3>.?Output?Stream:一個Output?Stream?是離開一個步驟時的行的堆棧。
4>.?Input?Stream:一個Input?Stream?是進入一個步驟時的行的堆棧。
5>.?Step:轉換的一個步驟,可以是一個Stream或是其他元素。
6>.?Hop:一個Hop?代表兩個步驟之間的一個或者多個數據流。一個Hop?總是代表著一個步驟的輸出流和一個步驟的輸入流。
7>.Note:一個Note?是一個轉換附加的文本注釋信息。
?
3).Kettle是一個開源的ETL工具,包括了4個部分。
Chef—?—?任務(job)設計工具(GUI方式)
Kitchen—?—?任務(job)執行器(命令行方式)
Spoon—?—?轉換(transform)設計工具(GUI方式)
Span—?—?轉換(transform)執行器(命令行方式)
????目前的版本已經看不到Chef的影子了,因為在Spoon里面包含了設計Job的功能。看來Kettle是將設計工具全部集成在了Spoon上面。而Spoon也包括了Job和Transform的執行功能。
SPOON?允許你通過圖形界面來設計ETL轉換過程(Transformation)和Job。
????Spoon?是一個圖形用戶界面,它允許你運行轉換或者任務,其中轉換是用Pan?工具來運行,任務是用Kitchen?來運行。Pan?是一個數據轉換引擎,它可以執行很多功能,例如:從不同的數據源讀取、操作和寫入數據。Kitchen?是一個可以運行利用XML?或數據資源庫描述的任務。通常任務是在規定的時間間隔內用批處理的模式自動運行。
PAN?允許你批量運行由Spoon設計的ETL轉換?(例如使用一個時間調度器)。Pan是一個后臺執行的程序,沒有圖形界面。
KITCHEN也是一個后臺運行的程序。
4.?Kettle?基本使用
1>.?Kettle?的幾個子程序的功能和啟動方式
Spoon.bat:?圖形界面方式啟動作業和轉換設計器。
Pan.bat:?命令行方式執行轉換。
Kitchen.bat:?命令行方式執行作業。
2>.?轉換和作業
Kettle?的?Spoon?設計器用來設計轉換(Transformation)和?作業(Job)。
?轉換主要是針對數據的各種處理,一個轉換里可以包含多個步驟(Step)。
?作業是比轉換更高一級的處理流程,一個作業里包括多個作業項(Job?Entry),一個作業項代表了一項工作,轉換也是一個作業項。
3>.?輸入步驟簡介
輸入類步驟用來從外部獲取數據,可以獲取數據的數據源包括,文本文件(txt,csv,xml,json)數據庫、?Excel?文件等桌面文件,自定義的數據等。對特殊數據源和應用需求可以自定義輸入插件。?例子:生成隨機數步驟
4>.?轉換步驟簡介
轉換類步驟是對數據進行各種形式轉換所用到的步驟。
例子:
字段選擇
計算器
增加常量
5>.?流程步驟簡介
流程步驟是用來控制數據流的步驟。一般不對數據進行操作,只是控制數據流。?例子:?過濾步驟
6>.?連接步驟簡介
連接步驟用來將不同數據集連接到一起。?例子:?笛卡爾乘積
7>.?輸出步驟簡介
輸出步驟是輸出數據的步驟,常見的輸出包括文本文件輸出、表輸出等,可以根據應用的需求開發插件以其他形式輸出。
例子:表輸出
8>.在Kettle里元數據的存儲方式:
?資源庫?資源庫包括文件資源庫、數據庫資源庫?Kettle?4.0?以后資源庫類型可以插件擴展
?XML?文件?.ktr?轉換文件的XML的根節點必須是?<transformation>?.kjb?作業XML的根節點是<job>
數據庫資源庫:
?把?Kettle?的元數據串行化到數據庫中,如?R_TRANSFORMATION?表保存了Kettle?轉換的名稱、描述等屬性。
?在Spoon?里創建和升級數據庫資源庫?
文件資源庫:?
在文件的基礎上的封裝,實現了?org.pentaho.di.repository.Repository?接口。是Kettle?4.0?以后版本里增加的資源庫類型?
不使用資源庫:?直接保存為ktr?或?kjb?文件。
Kettle?資源庫?–?如何選擇資源庫?
數據庫資源庫的缺點:
?不能存儲轉換或作業的多個版本。
?嚴重依賴于數據庫的鎖機制來防止工作丟失。
?沒有考慮到團隊開發,開發人員不能鎖住某個作業自己開發。?
文件資源庫的缺點:
?對象(如轉換、作業、數據庫連接等對象)之間的關聯關系難以處理,所以刪除、重命名等操作會比較麻煩。
?沒有版本歷史。
?難以進行團隊開發。?
不使用資源庫:使用?svn?進行文件版本控制。
9>.命令行執行Kettle文件
參數格式說明?有兩種參數格式?1.?/參數名:值?或?-參數名=值?建議使用第一種參數格式.
1.執行test.ktr?文件?日志保存在D:\log.txt?中,?默認日志級別是Basic?
Pan?/file:D:\AppProjects\nxkh\test.ktr?/logfile:D:\log.txt?
2.執行test.ktr?文件?日志保存在D:\log.txt?中,?日志級別是Rowlevel?
Pan?/file:D:\AppProjects\nxkh\test.ktr?/logfile:D:\log.txt?/level:?Rowlevel?
3.導出一個?job?文件,以及該?job?文件依賴的轉換及其他資源?
kitchen?/file:c:/job1.kjb?/export:c:/a.zip?
4.直接執行一個導出的?zip?文件?
Kitchen.bat?/file:"zip:file:///c:/a.zip!job1.kjb"
5.?常見錯誤及其排除
???1>.?數據庫的連接失敗
?
解決辦法,是鏈接相應的數據庫的jar包沒有加到Kettel中去。在百度或者以前的web項目中找個數據庫的jar包。將MySQL-connector-java-5.1.18.jar復制到D:\kettle5.1\data-integration\lib下面,重新啟動一次,這下就好了。再次測試,測試通過鏈接成功。
?
2>.?傳遞的數據時出現中文亂碼的處理。
在數據庫連接選項卡中,在選項中增加命名參數setCharacterEncoding?=?utf8
另外確保在創建數據庫時,Character?Set同時也設為utf8.
?
6.?Kettle的變量
1.?變量的類型
Kettle?的早期版本中的變量只有系統環境變量
目前版本中(3.1)?變量包括系統環境變量,?"Kettle變量"?和內部變量三種系統環境變量的影響范圍很廣,凡是在一個?JVM下運行的線程都受其影響.Kettle?變量限制了變量的作用范圍,?變量范圍包括三種分別是?grand-parent?job,?parent?job,?root?job?內部變量:?是?kettle?內置的一些變量,?主要是kettle?運行時依賴的環境,?如轉換文件名稱,?轉換路徑,ip地址,?kettle?版本號等等.
2.?變量的設置
"系統環境變量"?有三種設置方式
1)?通過命令行?-D?參數
2)?屬性文件?kettle.property?中設置,?該屬性文件位于?${user.home}.kettle?下
3)?通過設置環境變量步驟?(Set?Variable)?設置."Kettle?變量"?只能通過設置環境變量?(Set?Variable)?步驟設置,同時設置變量的作用范圍.
"內部變量"?是預置的無須設置.
3.?變量的使用
無論哪種類型的變量在使用上都是一樣的,?有兩種方式
1)?通過?%%var%%?或?${var}?來引用,?這個引用可以用在?SQL?語句中,?也可以用在允許變量輸入的輸入框里.
2)?通過獲取變量?(Get?Variable)?步驟來使用命令行參數:
1.?設置:?命令行參數通過獲取系統信息(Get?System?Info)?步驟設置,?在使用時可以像列名一樣來使用,不必像變量一樣要通過?${var}?這樣的格式引用.?用戶最多可以設置10個命令行參數
2.?傳遞:?命令行下使用?pan?/file:xxx.ktr?arg1?arg2?來傳遞參數.
圖形界面下,每次運行時有要求輸入參數的提示窗口.
7.?Kettle之效率提升
????Kettle作為一款ETL工具,肯定無法避免遇到效率問題,當很大的數據源輸入的時候,就會遇到效率的問題。對此有幾個解決辦法:?
1)數據庫端創建索引。對需要進行查詢的數據庫端字段,創建索引,可以在很大程度上提升查詢的效率,最多的時候,我不創建索引,一秒鐘平均查詢4條記錄,創建索引之后,一秒鐘查詢1300條記錄。?????
2)數據庫查詢和流查詢注意使用環境。因為數據庫查詢為數據輸入端輸入一條記錄,就對目標表進行一次查詢,而流查詢則是將目標表讀取到內存中,數據輸入端輸入數據時,對內從進行查詢,所以,當輸入端為大數據量,而被查詢表數據量較小(幾百條記錄),則可以使用流查詢,畢竟將目標表讀到內存中,查詢的速度會有非常大的提升(內存的讀寫速度是硬盤的幾百倍,再加上數據庫自身條件的制約,速度影響會更大)。同理,對于目標表是大數據量,還是建議使用數據庫查詢,不然的話,一下子幾百M的內存被干進去了,還是很恐怖的。?
????3)謹慎使用JavaScript腳本,因為javascript本身效率就不高,當你使用js的時候,就要考慮你每一條記錄,就要執行一次js所需要的時間了。?
????4)數據庫commit次數,一條記錄和一百條記錄commit對效率的影響肯定是不一樣的。?
????5)表輸入的sql語句的寫法。有些人喜歡在表輸入的時候,將所有關聯都寫進去,要么from?N多個表,要么in來in去,這樣,就要面對我在2)里面說道的問題,需要注意。?
6)注意日志輸出,例如選擇數據庫更新方式,而且日志級別是debug,那么后臺就會拼命的輸出日志,會在很大程度上影響速度,此處一定要注意。
7)kettle本身的性能絕對是能夠應對大型應用的,一般的基于平均行長150的一條記錄,假設源數據庫,目標數據庫以及kettle都分別在幾臺機器上(最常見的桌面工作模式,雙核,1G內存),速度大概都可以到5000?行每秒左右,如果把硬件提高一些,性能還可以提升?,?但是ETL?過程中難免遇到性能問題,下面一些通用的步驟也許能給你一些幫助.
盡量使用數據庫連接池
盡量提高批處理的commit?size
盡量使用緩存,緩存盡量大一些(主要是文本文件和數據流)
Kettle?是Java?做的,盡量用大一點的內存參數啟動Kettle.
可以使用sql?來做的一些操作盡量用sql
Group?,?merge?,?stream?lookup?,split?field?這些操作都是比較慢的,想辦法避免他們.,能用sql?就用sql
插入大量數據的時候盡量把索引刪掉
盡量避免使用update?,?delete?操作,尤其是update?,?如果可以把update?變成先delete?,后insert?.
能使用truncate?table?的時候,就不要使用delete?all?row?這種類似sql
盡量不要用kettle?的calculate?計算步驟,能用數據庫本身的sql?就用sql?,不能用sql?就盡量想辦法用procedure?,?實在不行才是calculate?步驟.
要知道你的性能瓶頸在哪,可能有時候你使用了不恰當的方式,導致整個操作都變慢,觀察kettle?log?生成的方式來了解你的ETL操作最慢的地方。
遠程數據庫用文件+FTP?的方式來傳數據?,文件要壓縮。(只要不是局域網都可以認為是遠程連接)
8.?Last:Kettle總結
#Kettle的功能非常強大,數據抽取效率也比較高,開源產品,可以進行第三方修改,工具中的控件能夠實現數據抽取的大部分需求。
#所有功能支持控件化,使用簡單
#Kettle目前還不是特別穩定,并且發現的BUG也特別多
三.Java調用Kettle?API
?Java代碼調用kettle任務
工具?kettle5.1版本
下載地址
所需的包?(這幾個包是必須要的,它們相互調用,不引用就報錯。)
?
這些包都可以去kettle?目錄C:\***\pdi-ce-5.1.0.0-752\data-integration\lib
下面去找(lib,libswt這幾個目錄里面有各種包。)另外需要連接數據庫,還需要連接數據庫的jar包。另外在需要什么包去這里面找。
1.?使用JavaAPI創建(比較繁瑣,不做講解,有興趣探究)
2.?使用Java調用現成的Transformation或者Job文件。
我們使用Spoo集成的圖形化界面工具設計轉換和工作。在利用Kettle提供的Java?API調用運行。
[java]?view plain?copy參考文獻:http://blog.csdn.net/cissyring/article/details/2493865
推薦教材:Pentaho?Kettle解決方案:使用PDI構建開源ETL解決方案
參考資料:?\\192.168.1.19\Development\InternalApp\share\Stephen
Kettle用戶手冊:http://wenku.baidu.com/view/99e2d235a32d7375a41780c3.html
PDI?Cookbook下載:?http://download.csdn.NET/download/baicaicai/3550176
總結
以上是生活随笔為你收集整理的kettle的基本介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Kettle能做什么?
- 下一篇: 中信金卡额度一般多少