汪洋,,韓寧
?。ㄖ袊?guó)軟件與技術(shù)服務(wù)股份有限公司,北京 100081)
摘要:在企業(yè)數(shù)據(jù)愈加龐大的今天,,大批量數(shù)據(jù)交換也越加頻繁,,ETL是數(shù)據(jù)處理的主要技術(shù)手段,但極少有ETL工具能夠兼顧自動(dòng)調(diào)度及跨網(wǎng)段交換,。在開(kāi)源ETL工具Kettle的基礎(chǔ)上,,設(shè)計(jì)實(shí)現(xiàn)能夠定制觸發(fā)規(guī)則、根據(jù)調(diào)度周期自主運(yùn)行交換作業(yè)的數(shù)據(jù)交換工具GoData,,該工具支持跨節(jié)點(diǎn)跨網(wǎng)段的數(shù)據(jù)交換作業(yè),,同時(shí)具有節(jié)點(diǎn)監(jiān)控及錯(cuò)誤作業(yè)預(yù)警和消息推送功能,支持集群和分布式部署,。該工具極大地滿足了企業(yè)對(duì)數(shù)據(jù)交換業(yè)務(wù)的需求,,在企業(yè)合理和充分利用現(xiàn)有數(shù)據(jù)資源方面發(fā)揮作用。
關(guān)鍵詞:ETL,;Kettle,;GoData;跨網(wǎng)段數(shù)據(jù)交換,;自動(dòng)觸發(fā)
中圖分類號(hào):TN919文獻(xiàn)標(biāo)識(shí)碼:ADOI: 10.19358/j.issn.1674-7720.2016.24.006
引用格式:汪洋,,韓寧. 基于開(kāi)源代碼的ETL工具的實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2016,35(24):19-21.
0引言
隨著互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,,企業(yè)內(nèi)業(yè)務(wù)應(yīng)用數(shù)量猛增,,業(yè)務(wù)數(shù)據(jù)更是與日俱增,,越來(lái)越多的企業(yè)在面對(duì)眾多業(yè)務(wù)系統(tǒng)產(chǎn)生的日益龐大的業(yè)務(wù)數(shù)據(jù)時(shí),顯得束手無(wú)策,,疲于應(yīng)對(duì),。其原因大多在于企業(yè)內(nèi)部信息化建設(shè)并沒(méi)有形成統(tǒng)一的標(biāo)準(zhǔn),各廠商,、各系統(tǒng),、各層級(jí)間數(shù)據(jù)形態(tài)各異,無(wú)法實(shí)現(xiàn)互聯(lián)互通數(shù)據(jù)共享,,從而形成“信息孤島”,。而信息是現(xiàn)代企業(yè)的重要資源,是企業(yè)科學(xué)管理,、決策分析的基礎(chǔ),。因此,打破“信息孤島”,,實(shí)現(xiàn)數(shù)據(jù)高效集成和共享是企業(yè)數(shù)字信息化建設(shè)的關(guān)鍵問(wèn)題。企業(yè)需要通過(guò)各種技術(shù)手段,,把數(shù)據(jù)轉(zhuǎn)換為信息,、知識(shí),最大程度地發(fā)揮數(shù)據(jù)的作用,,而ETL便是主要的技術(shù)手段,。
當(dāng)前企業(yè)信息建設(shè)普遍存在以下問(wèn)題:
(1)數(shù)據(jù)源眾多
企業(yè)內(nèi)層級(jí)部門眾多,,業(yè)務(wù)種類多樣,,數(shù)據(jù)來(lái)源更為廣泛。
?。?)數(shù)據(jù)差異性大
數(shù)據(jù)源眾多的前提下,,企業(yè)沒(méi)有統(tǒng)一的數(shù)據(jù)標(biāo)準(zhǔn)造成業(yè)務(wù)數(shù)據(jù)差異性大,在擁有結(jié)構(gòu)化數(shù)據(jù)的同時(shí)可能還存在大量半結(jié)構(gòu)以及無(wú)結(jié)構(gòu)數(shù)據(jù),。
?。?)業(yè)務(wù)數(shù)據(jù)增長(zhǎng)迅猛,數(shù)據(jù)利用率低下
據(jù)統(tǒng)計(jì),,大多數(shù)企業(yè)數(shù)據(jù)量每2~3年時(shí)間就會(huì)成倍增長(zhǎng),,業(yè)務(wù)數(shù)據(jù)增長(zhǎng)迅猛,而企業(yè)所關(guān)注的數(shù)據(jù)通常只占總數(shù)據(jù)量的2%~4%左右,,并沒(méi)有充分利用已存在的數(shù)據(jù)資源,。
因此,設(shè)計(jì)和實(shí)現(xiàn)一個(gè)穩(wěn)定,、高效,、符合企業(yè)形態(tài),、可以靈活部署的ETL工具勢(shì)在必行。其在使企業(yè)實(shí)現(xiàn)信息和數(shù)據(jù)共享的同時(shí),,還能夠幫助企業(yè)最大化地利用已存在的數(shù)據(jù)資源,,完善企業(yè)數(shù)字化、信息化建設(shè),。
1Kettle介紹
ETL(Extraction, Tansformation, Loading)即是將數(shù)據(jù)從來(lái)源端經(jīng)過(guò)抽取和轉(zhuǎn)換后加載到目的端的過(guò)程,。在ETL過(guò)程中,數(shù)據(jù)抽取即是從數(shù)據(jù)源中抽取數(shù)據(jù)的過(guò)程,,也可從多個(gè)數(shù)據(jù)源中進(jìn)行數(shù)據(jù)抽?。粩?shù)據(jù)轉(zhuǎn)換即是對(duì)抽取數(shù)據(jù)進(jìn)行清洗,,通過(guò)清洗策略和合并,、轉(zhuǎn)換以及數(shù)學(xué)運(yùn)算等操作,去除數(shù)據(jù)中存在的錯(cuò)誤和冗余,,也可根據(jù)要求變換數(shù)據(jù)格式,,保證數(shù)據(jù)質(zhì)量;數(shù)據(jù)裝載即是將轉(zhuǎn)換好的數(shù)據(jù)保存到數(shù)據(jù)庫(kù)或文件中,。目前,,越來(lái)越多的廠商致力于ETL工具的研發(fā),而較常用的開(kāi)源工具有Kettle,、 Talend,、 Octopus等,其中以開(kāi)源Java工具Kettle應(yīng)用最廣,,表現(xiàn)最為突出,。
Kettle是一款用Java編寫的開(kāi)源ETL工具,其主要由轉(zhuǎn)換(Transformation)和作業(yè)(Job)兩部分組成,。其中“轉(zhuǎn)換”是由一系列步驟組成的,,每一個(gè)步驟表示對(duì)一個(gè)或多個(gè)數(shù)據(jù)流進(jìn)行特定的轉(zhuǎn)換操作。而“作業(yè)”基于工作流模型,,協(xié)調(diào)數(shù)據(jù)源,、執(zhí)行過(guò)程和相關(guān)依賴性的ETL活動(dòng),其將功能性和實(shí)體過(guò)程聚合起來(lái),,完成對(duì)整個(gè)工作流的控制,。Kettle的概念模型如圖1所示[1]。圖1Kettle概念模型圖2GoData架構(gòu)圖Kettle優(yōu)點(diǎn)很多:具有可視化的流程設(shè)計(jì)工具,,具備眾多數(shù)據(jù)處理控件,,擁有良好的插件擴(kuò)展功能,支持集群操作等,??梢哉f(shuō)Kettle是當(dāng)前ETL開(kāi)源世界中功能最全面的一款工具[2],。但是每個(gè)產(chǎn)品都有其自身的局限性,Kettle也不能例外,,比如缺少多頻度自動(dòng)觸發(fā)調(diào)度機(jī)制,,不能實(shí)現(xiàn)跨網(wǎng)段數(shù)據(jù)交換功能等。而這恰巧是多數(shù)企事業(yè)單位對(duì)數(shù)據(jù)交換業(yè)務(wù)的共性需求,。
2GoData設(shè)計(jì)與實(shí)現(xiàn)
2.1設(shè)計(jì)初衷
GoData的設(shè)計(jì)初衷即是打造一款符合大多數(shù)企事業(yè)單位數(shù)據(jù)交換需求的ETL工具,,其在Kettle的基礎(chǔ)上,取長(zhǎng)補(bǔ)短,,調(diào)整作業(yè)運(yùn)行機(jī)制,,完善作業(yè)調(diào)度機(jī)制,加入作業(yè)觸發(fā)機(jī)制,,并在保證數(shù)據(jù)正確安全的基礎(chǔ)上,,實(shí)現(xiàn)跨網(wǎng)段的數(shù)據(jù)交換,加入作業(yè)監(jiān)控,,實(shí)現(xiàn)錯(cuò)誤告警,,整理日志記錄機(jī)制,完善作業(yè)調(diào)度及授權(quán)等功能,。
2.2設(shè)計(jì)實(shí)現(xiàn)
GoData產(chǎn)品架構(gòu)圖如圖2所示,,最底層為數(shù)據(jù)來(lái)源層,GoData可適配的數(shù)據(jù)來(lái)源眾多,,包括結(jié)構(gòu)化數(shù)據(jù)、半結(jié)構(gòu)化數(shù)據(jù)以及非機(jī)構(gòu)化數(shù)據(jù),;協(xié)議適配層是GoData的網(wǎng)絡(luò)適配協(xié)議,,既包括RDBMS、HTTP等,,也能對(duì)WebService,、FTP等進(jìn)行適配;功能組件層包含了管理組件,、監(jiān)控組件,、安全組件、輔助組件以及核心組件,;展示層則包含了產(chǎn)品對(duì)外的展示形式,,包括圖形、文本和表格等,。
圖3展示的是GoData的核心模塊,,主要包含:作業(yè)設(shè)計(jì)器、作業(yè)調(diào)度器,、作業(yè)監(jiān)控器三個(gè)模塊,。其中觸發(fā)機(jī)制在流程設(shè)計(jì)時(shí)進(jìn)行定制,,然后在作業(yè)運(yùn)行態(tài)時(shí)由調(diào)度器根據(jù)該作業(yè)的觸發(fā)機(jī)制完成調(diào)度。各模塊之間通過(guò)共享數(shù)據(jù)庫(kù)進(jìn)行通信,。
GoData作業(yè)編輯器可以配置觸發(fā)器的觸發(fā)規(guī)則,、作業(yè)的處理流程、節(jié)點(diǎn)配置,、路由配置和集群配置等,,同時(shí)可以對(duì)配置完成的作業(yè)進(jìn)行調(diào)試??刂婆_(tái)執(zhí)行器負(fù)責(zé)在后臺(tái)調(diào)度執(zhí)行所有的作業(yè),,并且根據(jù)作業(yè)來(lái)配置調(diào)用節(jié)點(diǎn)、路由和集群功能,。節(jié)點(diǎn)管理模塊負(fù)責(zé)配置管理多節(jié)點(diǎn)的數(shù)據(jù)信息,。路由管理模塊負(fù)責(zé)配置管理多節(jié)點(diǎn)路由信息。集群調(diào)度器負(fù)責(zé)在集群間進(jìn)行數(shù)據(jù)分發(fā)和同步,。接收適配器和發(fā)送適配器負(fù)責(zé)在多節(jié)點(diǎn)之間接收和發(fā)送業(yè)務(wù)數(shù)據(jù),。
GoData在Kettle的基礎(chǔ)上加入了傳輸模塊,該模塊依托于作業(yè)編輯器對(duì)傳輸節(jié)點(diǎn)及路由的配置信息,,將所交換數(shù)據(jù)正確安全地傳輸?shù)侥繕?biāo)節(jié)點(diǎn),。節(jié)點(diǎn)通信使用Netty作為底層支撐,使用“客戶端/服務(wù)器”模式進(jìn)行節(jié)點(diǎn)之間通信,。通信的每個(gè)數(shù)據(jù)包會(huì)根據(jù)節(jié)點(diǎn)路由表的配置選擇正確的鏈路,,并且具有斷點(diǎn)續(xù)傳功能。發(fā)送數(shù)據(jù)的一方為數(shù)據(jù)源節(jié)點(diǎn),,接收數(shù)據(jù)的一方稱為目標(biāo)節(jié)點(diǎn),,傳輸過(guò)程經(jīng)過(guò)的節(jié)點(diǎn)為路由節(jié)點(diǎn)。三種節(jié)點(diǎn)的角色在傳輸過(guò)程中可能會(huì)互換(例如,,當(dāng)下一個(gè)路由節(jié)點(diǎn)為目標(biāo)節(jié)點(diǎn)的時(shí)候,,路由節(jié)點(diǎn)和目標(biāo)節(jié)點(diǎn)是同等的)。當(dāng)源節(jié)點(diǎn)是路由節(jié)點(diǎn)的時(shí)候源節(jié)點(diǎn)和路由節(jié)點(diǎn)是等同的,。數(shù)據(jù)包從源節(jié)點(diǎn)出發(fā),,到達(dá)第一個(gè)路由節(jié)點(diǎn)后,此路由節(jié)點(diǎn)從配置中讀取它的下一個(gè)路由節(jié)點(diǎn)的配置信息,,如果此節(jié)點(diǎn)就是目標(biāo)節(jié)點(diǎn),,則不需要再傳遞數(shù)據(jù)包,如果還有下一個(gè)路由節(jié)點(diǎn),,那么使用客戶端服務(wù)器模式連接路由節(jié)點(diǎn),,然后將這次路由信息保存到數(shù)據(jù)包中,最后發(fā)送數(shù)據(jù)包到下一個(gè)路由節(jié)點(diǎn),。這樣重復(fù)以上所述步驟,,最終到達(dá)目標(biāo)節(jié)點(diǎn),。在傳輸過(guò)程中用戶可以選擇是否對(duì)傳輸信息進(jìn)行二次加密,GoData在Kettle加密的基礎(chǔ)上,,使用DES加密協(xié)議,,對(duì)每個(gè)數(shù)據(jù)包的數(shù)據(jù)區(qū)又進(jìn)行二次加密,為了保證傳輸?shù)臄?shù)據(jù)量不變和傳輸過(guò)程中數(shù)據(jù)包協(xié)議的合理性,,加密后數(shù)據(jù)包的大小保持不變,。為了安全性的考慮,密鑰不會(huì)包含在數(shù)據(jù)包中,,而是使用雙方協(xié)商的加密方式,,在部署配置的時(shí)候設(shè)定密碼。
此外,,GoData具有Web監(jiān)控及管理功能,,業(yè)務(wù)人員能夠遠(yuǎn)程對(duì)數(shù)據(jù)交換的各節(jié)點(diǎn)狀態(tài)進(jìn)行監(jiān)控并對(duì)節(jié)點(diǎn)上運(yùn)行的交換作業(yè)進(jìn)行管理。因此,,GoData系統(tǒng)分成兩種主要節(jié)點(diǎn),,業(yè)務(wù)數(shù)據(jù)交換節(jié)點(diǎn)和Web監(jiān)控管理節(jié)點(diǎn)。業(yè)務(wù)數(shù)據(jù)交換節(jié)點(diǎn)主要負(fù)責(zé)業(yè)務(wù)數(shù)據(jù)的讀取,、傳輸,、轉(zhuǎn)換和裝載。系統(tǒng)的Web監(jiān)控管理節(jié)點(diǎn)則負(fù)責(zé)監(jiān)控所有交換節(jié)點(diǎn)的運(yùn)行情況和遠(yuǎn)程控制交換作業(yè)的啟停,,并能在發(fā)生異常時(shí)進(jìn)行告警消息推送,。
在企業(yè)中,可以根據(jù)企業(yè)網(wǎng)絡(luò)形態(tài)及具體業(yè)務(wù)需求部署多個(gè)GoData來(lái)完成數(shù)據(jù)交換任務(wù),,每一個(gè)GoData被認(rèn)為是一個(gè)節(jié)點(diǎn),,在企業(yè)內(nèi)網(wǎng)中,GoData根據(jù)配置的交換作業(yè)自主運(yùn)行,,并把日志信息同步到Web監(jiān)控節(jié)點(diǎn),相關(guān)人員可以登錄Web監(jiān)控節(jié)點(diǎn)對(duì)各節(jié)點(diǎn)運(yùn)行情況進(jìn)行監(jiān)控,。
2.3技術(shù)特點(diǎn)
GoData在保留Kettle原有優(yōu)點(diǎn)的基礎(chǔ)上,,通過(guò)變更調(diào)度機(jī)制,加入觸發(fā),、監(jiān)控等機(jī)制后,,具有了更多的優(yōu)勢(shì)。
(1)定制化調(diào)度機(jī)制
企業(yè)可以根據(jù)自身數(shù)據(jù)交換業(yè)務(wù)的需求,,定制數(shù)據(jù)交換作業(yè)觸發(fā)機(jī)制,,支持單次運(yùn)行和多次重復(fù)運(yùn)行兩種調(diào)度機(jī)制,設(shè)置完成后,,由GoData根據(jù)觸發(fā)規(guī)則自主調(diào)度作業(yè)運(yùn)行,,收集作業(yè)日志信息,,提交作業(yè)運(yùn)行數(shù)據(jù)。
(2)安全高效的傳輸機(jī)制
在文件傳輸時(shí),,將文件劃分為多個(gè)數(shù)據(jù)包,,支持傳輸加密和斷點(diǎn)續(xù)傳。不但實(shí)現(xiàn)了跨網(wǎng)段的數(shù)據(jù)交換作業(yè),,而且能有效節(jié)省傳輸時(shí)間,,保證數(shù)據(jù)安全。解決了實(shí)際業(yè)務(wù)中數(shù)據(jù)跨層級(jí)交換的難題,,簡(jiǎn)化數(shù)據(jù)交換流程和步驟,,提高了數(shù)據(jù)交換效率,保證了交換數(shù)據(jù)的質(zhì)量,。
(3)運(yùn)行監(jiān)控
加入了監(jiān)控組件,,可以對(duì)各數(shù)據(jù)交換節(jié)點(diǎn)進(jìn)行遠(yuǎn)程監(jiān)控,啟停數(shù)據(jù)交換作業(yè),,并在作業(yè)異常時(shí)發(fā)出錯(cuò)誤預(yù)警,,推送預(yù)警信息到微信端,增強(qiáng)數(shù)據(jù)交換響應(yīng)機(jī)制,。
(4)分布式架構(gòu)
GoData支持分布式部署,,多個(gè)GoData之間可以相互通信,同時(shí)GoData支持集群,,一個(gè)作業(yè)可以使用集群方式來(lái)執(zhí)行和運(yùn)算,。因此企業(yè)可以根據(jù)具體數(shù)據(jù)業(yè)務(wù)調(diào)配GoData的使用,并且根據(jù)數(shù)據(jù)量來(lái)選擇是否使用集群,。這種可伸縮的分布式架構(gòu)可實(shí)現(xiàn)批量作業(yè)在多臺(tái)機(jī)器,、多個(gè)節(jié)點(diǎn)上同時(shí)進(jìn)行,能夠極大地提升數(shù)據(jù)交換作業(yè)的處理效率,。
(5)先進(jìn)的容錯(cuò)機(jī)制
經(jīng)過(guò)多番測(cè)試及完善,,在意外斷網(wǎng)或斷電情況發(fā)生時(shí),GoData能夠在異常發(fā)生后快速恢復(fù)作業(yè),,提高了數(shù)據(jù)交換的健壯性,。
(6)大吞吐量,運(yùn)行穩(wěn)定
目前,,GoData已經(jīng)在多個(gè)項(xiàng)目中得到運(yùn)用,,每小時(shí)吞吐量超過(guò)1 000萬(wàn)條數(shù)據(jù),運(yùn)行穩(wěn)定,。
3結(jié)論
GoData在開(kāi)源軟件Kettle的基礎(chǔ)上加入了觸發(fā)機(jī)制,,完善調(diào)度機(jī)制,增加了跨網(wǎng)交換傳輸、遠(yuǎn)程監(jiān)控管理以及容錯(cuò)機(jī)制等,,能夠很好地為企業(yè)數(shù)據(jù)信息建設(shè)服務(wù),,滿足企業(yè)進(jìn)行大批量高頻次數(shù)據(jù)交換的需求,使企業(yè)能夠更深入地利用數(shù)據(jù)資源,,實(shí)現(xiàn)數(shù)據(jù)的價(jià)值最大化,,幫助企業(yè)制訂計(jì)劃,運(yùn)營(yíng)決策,。
參考文獻(xiàn)
?。?] 劉充.基于KETTLE的高校多源異構(gòu)數(shù)據(jù)集成研究及實(shí)踐[J].電子設(shè)計(jì)工程,2015,23(10):24 26.
[2] 閆小爽,李忠華,李璐,等.開(kāi)源ETL軟件在智能化集成系統(tǒng)中的應(yīng)用[J].工程應(yīng)用,2009(4):46 48.