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