版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 Kettle應(yīng)用案例分析 趙貴兵Summary:Kettle是一款功能強(qiáng)大且最流行的ETL工具,該文通過Kettle在工程實(shí)踐中的一個(gè)應(yīng)用場(chǎng)景,描述了Kettle應(yīng)用方法和技巧,希望為其他應(yīng)用提供參考。Key:Kettle;ETL;流程軟件:TP311 :A:1009-3044(2019)09-0095-02Pentaho公司的Data Integration產(chǎn)品,又名Kettle,是一款使用元數(shù)據(jù)驅(qū)動(dòng)的功能強(qiáng)大的ETL工具,可以在Windows、Unix上運(yùn)行。Kettle本身提供了強(qiáng)大的圖形界面設(shè)計(jì)器和豐富的組件,可以大大縮短數(shù)據(jù)抽取項(xiàng)目的開發(fā)周期,并且容易維護(hù)。Kettle設(shè)計(jì)器界面友
2、好,提供了工作流設(shè)計(jì)模式,能滿足各種場(chǎng)景的實(shí)現(xiàn),更詳細(xì)的說明和下載請(qǐng)參考Pentaho官網(wǎng):。下面詳細(xì)說明作者在實(shí)踐中應(yīng)用Kettle時(shí)遇到的問題和解決方法,希望能為大家的實(shí)踐應(yīng)用提供參考。1 應(yīng)用案例說明在該應(yīng)用中,需要準(zhǔn)實(shí)時(shí)的將大量碎片文件中的行記錄保存到數(shù)據(jù)庫,并將部分記錄分發(fā)給下游模塊。文件中的行記錄在入庫前需要進(jìn)行規(guī)整、轉(zhuǎn)換、過濾、匹配、合并記錄等復(fù)雜操作。下圖是對(duì)一批文件的處理流程:以下對(duì)該流程圖中的重要組件進(jìn)行說明:1)“從結(jié)果獲取記錄”組件從父流程接收最多500個(gè)文件全路徑,然后由“列出字段”組件解析出每個(gè)文件的行和列的值,解析出的每一行記錄都保存有該行所在的文件名。如果該流程
3、每次只接收一個(gè)文件,那么在需要處理大量碎片文件的情況下,根本無法滿足性能要求,因?yàn)榱鞒痰募虞d和啟動(dòng)占了一次流程執(zhí)行的絕大多數(shù)時(shí)間。2)“Movefile Step”組件是一個(gè)自定義組件,該組件的功能是判斷記錄中傳入的文件名如果發(fā)生變更,就將變更前的文件備份并刪除。Kettle自帶組件中沒有此功能的組件,考慮到需要在很多流程中使用,所以利用了Kettle的插件機(jī)制,定義了該組件。3)“記錄輸入格式錯(cuò)誤”-“字段選擇”-“Movefile Step”,“記錄hit失敗”-“字段選擇”-“Movefile Step”,“記錄入庫錯(cuò)誤”-“字段選擇”-“Movefile Step”,“空操作”-“字段
4、選擇”-“Movefile Step”,以上這些流程確保了所有記錄都會(huì)經(jīng)過“Movefile Step”組件,從而保證當(dāng)一個(gè)文件的所有行被處理后,這個(gè)文件一定會(huì)執(zhí)行被備份和刪除操作。4)“字段轉(zhuǎn)換”是一個(gè)JS組件,被使用對(duì)字段值進(jìn)行規(guī)整,增加需要的擴(kuò)展字段。JS組件在測(cè)試中達(dá)到4000記錄/秒的處理效率,能滿足該應(yīng)用場(chǎng)景的使用需求。在該應(yīng)用中,有很多個(gè)業(yè)務(wù)流程,它們是并行執(zhí)行的,這樣不同業(yè)務(wù)的碎片文件能夠被并行處理?!癑ava Code”組件能提供更高的處理效率,但是編寫的代碼更復(fù)雜,在可以滿足處理效率的前提下,“JavaScript Code”是更好的選擇。5)“關(guān)聯(lián)外部資源”是一個(gè)“Jav
5、a Code”組件,雖然該組件編寫復(fù)雜,調(diào)試?yán)щy,但在這里使用它可以使流程繪制更簡(jiǎn)潔,因?yàn)檫@里的業(yè)務(wù)邏輯太復(fù)雜,使用Java語言更容易描述清楚。如果只是使用Kettle的自帶組件,可能會(huì)繪出一條異常復(fù)雜的流程圖。關(guān)于如何為“Java Code”組件編寫代碼將在后文中描述。6)“關(guān)聯(lián)外部資源查詢”是一個(gè)“Java Code”組件,它將Kettle流中的字段值和內(nèi)存中緩存的字典進(jìn)行匹配,如果匹配成功,則將字典中對(duì)應(yīng)的值填入Kettle流。在該應(yīng)用中有多個(gè)內(nèi)存字典,它們通過Job定時(shí)從數(shù)據(jù)庫中加載到Kettle應(yīng)用程序內(nèi)存中,通過Java讀寫并發(fā)鎖避免讀寫沖突。7)“判斷插入還是更新”是一個(gè)“Jav
6、a Code”組件,它用于前后記錄的匹配。在該應(yīng)用中,有“開始”記錄,有“結(jié)束”記錄,還有其他記錄,“開始”和“結(jié)束”記錄根據(jù)某些字段值可以判定為一對(duì)記錄,需要做合并?!伴_始”記錄會(huì)被記錄在內(nèi)存中,當(dāng)“結(jié)束”記錄出現(xiàn)時(shí),首先在內(nèi)存中查找對(duì)應(yīng)的“開始”記錄,如果未找到則去數(shù)據(jù)庫中查找。記錄在內(nèi)存中的“開始”記錄,如果被“結(jié)束”記錄匹配上則被清除,或者超過時(shí)限也會(huì)被清除,這些被從內(nèi)存中清除的“開始”記錄在數(shù)據(jù)庫中仍然可以查找到,不會(huì)丟失。8)“插入或更新數(shù)據(jù)庫”是一個(gè)“Java Code”組件,它將一條輸入記錄拆分并插入多個(gè)數(shù)據(jù)庫表,并保證多個(gè)表的事務(wù)一致性,它同時(shí)還將入庫的記錄通過自定義的Soc
7、ket服務(wù)發(fā)生給Socket客戶端。自定義的Socket服務(wù)在應(yīng)用初始化時(shí)創(chuàng)建并接收客戶端的連接。在該應(yīng)用中,所有“Java Code”組件中使用的數(shù)據(jù)庫連接都是從c3p0連接池獲取的,這樣可以更好的管理和監(jiān)控?cái)?shù)據(jù)庫連接。上圖的流程是一個(gè)實(shí)際應(yīng)用中復(fù)雜ETL流程,它包含了許多典型的操作,如內(nèi)存匹配、入庫、通過Socket分發(fā)、備份并刪除文件等。作者通過巧妙的使用Kettle中的各種組件,將復(fù)雜的操作過程簡(jiǎn)單化,在Kettle流程圖中清晰的表達(dá)了出來,同時(shí)也彰顯了Kettle的強(qiáng)大。2 應(yīng)用技巧1)Kettle自帶的“Java Code”組件是一個(gè)功能強(qiáng)大的腳本組件,為Kettle功能擴(kuò)展提供了
8、強(qiáng)力支持。如果直接在“Java Code”組件中編寫Java代碼,不但困難,而且容易出錯(cuò)。如果代碼邏輯復(fù)雜,那么直接在Kettle界面上編寫幾乎不可行。一種方法是首先在IDE中編碼,然后將代碼同步到“Java Code”組件中。具體操作如下:1)在IDE中新建一個(gè)Java工程,將Kettle安裝目錄下lib目錄中的所有jar引入該工程。新建一個(gè)Java類,該類繼承Kettle的TransformClassBase類。當(dāng)在IDE中編寫完成后,將Java類中“import”部分和“processRow”方法的代碼拷貝到“Java Code”組件即可,如果除“processRow”外,還在該類中新建
9、了其他方法,也要將這些方法一并拷貝到“Java Code”組件中。2)“Java Code”組件中的Java代碼和它引用的其他代碼中不能使用Java模板類功能,如不能使用“java.util.List”,而只能用“java.util.List”,在實(shí)際使用時(shí)需將“java.util.List”中的對(duì)象做強(qiáng)制轉(zhuǎn)換,其他Java類同理。3)從Kettle中配置的數(shù)據(jù)庫中獲取c3p0連接池所需的數(shù)據(jù)庫信息,代碼如下:TransMeta transMeta = getTransMeta();DatabaseMeta dm = transMeta.findDatabase(getVariable(“db
10、name”, “defaultName”);String host = dm.getHostname();String port = dm.getDatabasePortNumberString();String db = dm.getDatabaseName();String username = dm.getUsername();String password = dm.getPassword();4)Kettle插件編寫和插件安裝,請(qǐng)參考該文檔:https:/Documentation/6.0/0R0/0V0。5)配置log4j日志,將log4j日志配置文件如“l(fā)og4j.xml”放在Kettle安裝目錄的classes目錄下,重啟Kettle即生效。6)添加第三方j(luò)ar包到Kettle中,最直接的方法是將jar包放在Kettle安裝目錄下的lib目錄中,重啟Kettle即可。Reference:1 Pentaho Kettle源代碼.EB/OL.https:/pentaho/pentaho-kettle .2 Kettle安裝目錄/docs/English/welcome/index.html Kettl
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 承德護(hù)理職業(yè)學(xué)院《曲式與作品分析基礎(chǔ)Ⅰ》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024版全職員工合同-家具銷售公司
- 二零二五年定制化計(jì)時(shí)工服務(wù)協(xié)議書2篇
- 2024年版企業(yè)安全評(píng)估咨詢合同樣本版B版
- 2024淘寶年度合作伙伴線上線下融合合同模板3篇
- 2024泰州環(huán)保企業(yè)員工勞動(dòng)合同書模板3篇
- 2024柜式空調(diào)機(jī)直接訂購采購合同
- 2025年度大型綜藝節(jié)目現(xiàn)場(chǎng)管理人員勞動(dòng)合同2篇
- 2024年規(guī)范化二手住宅買賣合同書版B版
- 2024年規(guī)?;笄蒺B(yǎng)殖場(chǎng)租賃經(jīng)營合同3篇
- 飼料加工混凝土施工合同
- 會(huì)議會(huì)務(wù)服務(wù)投標(biāo)方案投標(biāo)文件(技術(shù)方案)
- 機(jī)械結(jié)構(gòu)工程師年終總結(jié)
- 成都大學(xué)《Python數(shù)據(jù)分析》2023-2024學(xué)年期末試卷
- 2024年醫(yī)院消毒隔離制度范文(六篇)
- 2024年國家開放大學(xué)(電大)-行政管理(本科)考試近5年真題集錦(頻考類試題)帶答案
- 2024-2025學(xué)年三年級(jí)上冊(cè)數(shù)學(xué)蘇教版學(xué)考名師卷期末數(shù)學(xué)試卷
- 2024年秋一年級(jí)上冊(cè)4日月山川 公開課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì)
- 護(hù)士先進(jìn)個(gè)人事跡材料(12篇)
- 2024-2030年中國壓電薄膜傳感器行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略分析報(bào)告
- TSG+23-2021氣瓶安全技術(shù)規(guī)程
評(píng)論
0/150
提交評(píng)論