張孟春

摘要:針對數據分析融合平臺建設中數據集成開發效率低、數據集成慢和數據網絡分散等問題,提出跨網絡傳輸的分布式ETL框架設計。通過對主流ETL工具進行分析,總結了ETL的工作原理及過程,設計了一種基于消息中間件面向數據集成的分布式ETL框架。使用該框架處理數據集成任務時,提交數據集成過程的描述文件進行數據處理。基于元模型驅動和面向切面設計思想,設計數據任務執行引擎和控制模型。基于該框架開發的工具可使數據開發人員從大量重復的數據操作中解脫出來,將更多精力放在數據的邏輯處理上。
關鍵詞關鍵詞:數據集成;分布式; ETL;消息中間件
DOIDOI:10.11907/rjdk.171780
中圖分類號:TP391
文獻標識碼:A文章編號文章編號:16727800(2017)011019703
0引言
ETL是構建數據倉庫的重要工具,構建數據倉庫60%左右的工作量由ETL工具完成。ETL工具從一個或多個業務數據庫中抽取數據,經過清洗轉換,然后加載到數據倉庫中。隨著信息化建設的深入,企業和政府深層次利用數據進行數據挖掘和信息共享成為急需解決的問題。一般數據多采用上下級代理方式,數據分散在各地方和部門,這種數據集成需要跨網絡傳輸。如何從網絡分布的異構數據源中快速構建數據倉庫,是數據集成面臨的關鍵問題。
相對于傳統的ETL,數據集成領域的ETL需要解決復雜的網絡環境、集成效率、性能需求等問題。本文采用消息中間件作為數據通信總線,屏蔽網絡底層通信協議和網絡環境差異。使用基于元數據架構的ETL作為分布式ETL數據處理節點,設計了分布ETL工具并實現了子節點。
1數據集成研究現狀
數據集成是指把不同來源、格式、特點及性質的數據進行邏輯或物理上的集中,從而為企業提供一個靈活、可擴展的數據視圖,數據集成方法分為模式集成和數據復制[3]。模式集成方法將各數據源的局部視圖轉換成全局模式;數據復制方法是在保持數據源數據一致性、提高信息共享利用效率的基礎上,將各數據源的數據復制到一個公共數據源上。文獻[1]提出一種基于ETL的數據集成工具和ETL過程模型,開發面向數據集成的ETL系統Datalntegartor。
ETL的過程研究集中在數據抽取和數據轉換上。文獻[2]從提取、轉換、裝載3個不同角度詳細闡述了ETL的核心內容,并介紹了3個不同流程中涉及的關鍵技術。文獻[3]介紹了幾種不同的數據提取方法,對各種方法進行了詳細的比較,并對每種提取方法適應的環境進行了總結。文獻[4]將數據抽取分為全量抽取和增量抽取,并將ETL的過程區分為全量ETL和增量ETL過程。
在數據傳輸方面,文獻[5]、[6]、[7]提出使用消息中間件進行數據傳輸。文獻[5]通過觸發器捕獲變化的數據,并將數據建成xml文檔,使用消息中間件OpenJMS進行數據傳遞。文獻[6]提出采用xml作為中間數據格式實現異構數據源的統一轉換,利用消息的異步處理機制完成應用系統間的數據交換和傳輸。文獻[7]基于ActiveMQ設計了一種輕量級的企業服務總線L-ESB,總線通過消息隊列傳遞消息和數據。
2ETL過程描述
ETL過程指數據抽取、轉換、加載過程。目前對ETL過程的描述有兩種觀點:①數據倉庫是基于數據源建立的物化視圖,而ETL過程是用于維護物化視圖的過程;②數據清理需要指定數據處理動作,應該使用工作流(workflow)來描述ETL過程。本文采用第二種思想,將ETL過程視為一種數據處理流程。
2.1ETL過程形式化描述
對數據操作過程可以抽象成有向的DGA圖,節點表示數據操作邊,代表操作的先后次序,可進行ETL子過程的嵌套。ETL過程描述是對DGA圖描述,是ETL工具進行數據處理的執行計劃。ETL過程的一般定義如下:
定義1ETL={job1,job2…,jobk},它由多個相互獨立的作業job組成。
定義2job=(Tasks,Rs)(i=1,2,3,…,k),它由多個相互關聯的Task組成,其中Tasks={Task1,Task2…,Taskn},表示每個作業有多個ETL任務組成;Rs={R1,R2…,Rn}Ri={P(Taski,Taskj)|j,i?(1,2,…n),j≠i}表示ETL任務之間的先后順序關系。
定義3Task與job定義類似,Task=(Os,Rs),Os表示數據操作集合,Rs表示數據操作之間的約束關系。
數據操作有以下3種:
(1)抽取操作:不同的抽取操作代表不同的數據源,抽取操作根據數據源的描述信息進行數據讀取,以便為隨后的步驟提供數據。不同數據源的讀取操作不同,這部分是ETL數據集成的主要障礙。
(2)轉換操作:在數據抽取和加載之間,任何對數據的操作過程均可稱為轉換操作。數據轉換是ETL中最為復雜的問題,主要解決模型轉換中的各種沖突,包括命名沖突、格式沖突、結構沖突等。轉換步驟是對模型轉換和模式映射的規則描述。
(3)加載操作:將完成處理的數據加載到目標倉庫,系統的所有操作包括事實表操作和維表操作。
2.2ETL描述格式
采用Xml對ETL過程模型進行描述。XML是W3C組織制定的通用數據格式表示語言。XML標準以其開放、自描述、向前兼容的特性成為數據交換的事實標準。Xml提供一種結構化的統一方法,用于描述和傳輸數據,可以方便地實現模型擴展。XML文檔采用Unidcode編碼,任何標準的XML語法分析器都可以讀取、解碼和檢驗這種基于文本的自描述數據文檔,大大方便了XML在網絡之間的交換。ETL過程描述結構如下:
…
3體系架構
3.1總體架構
系統總體結構見圖1。由圖1可知,分布式ETL是一個多層架構體系,包括管理層、控制層與執行層,每層功能不同。管理層由客戶端工具組成,負責ETL解決方案的設計和監控。控制層包括管理接口和任務調度器;管理接口是整個后臺的應用通信接口,架起管理層和后臺的通信橋梁;任務調度器也稱為任務調度服務層,是ETL作業運行的調度控制中心。執行層由一系列的任務執行節點組成,主要接受調度控制器發出的各種調度指令,并根據指令進行任務實例化、執行與停止等工作。
工具分為前端作業設計工具和后臺作業運行。后臺作業運行由一系列服務組件部署在不同節點上,并通過不同服務組件間協同工作,完成任務調度以及客戶端通信處理。工具支持多客戶端,用戶可以管理自己的作業并監控執行情況;系統用戶可以管理整個集群的節點及用戶權限管理;工具有一個調度控制器和多個任務執行服務節點。
客戶端工具包括:用戶認證管理工具admin、數據集成方案設計工具designer、監控工具monior。后臺cm節點主要監控客戶端請求并提供服務,它是客戶端與server節點的連接通道。Server負責控制集群的其它運行節點和任務調度;執行節點node負責運行任務。采用消息中間件作為系統的控制總線和數據總線,負責傳輸數據和控制信息。
3.2節點通信
前臺工具與后臺cm節點采用http協議進行通信。消息中間件負責集群節點node之間的數據傳輸和任務遷移,以及server節點與node節點之間控制信息的傳輸,其中消息隊列保存系統間消息,確保消息的異步性、持久性和可靠性。控制信息采用同步方式進行數據傳輸。消息中間件采用使用廣泛、免費開源的ActiveMQ。
在消息中間件中所有數據都通過消息進行傳輸,一條消息由消息頭、屬性及消息的有效負載組成。Message消息是整個消息系統的重要組成部分,因為基于消息的應用系統所有數據和事件都是使用消息進行通信的。消息頭提供了消息的相關元數據,它描述了消息由誰創建、何時創建、數據有效長度等信息。使用消息選擇器進行消息過濾,基于特定的消息頭和屬性值選擇接收消息。消息中間件提供幾種類型的消息,包括TextMessage、StreamMessage、MapMessage、ObjectMessage和BytesMessage。
系統需要傳輸的數據包括:數據處理任務、處理后的數據、節點之間的控制信息。數據處理任務采用xml描述,使用TextMessage進行封裝;處理后的數據塊采用ObjectMessage進行傳輸;控制信息采用MapMessage進行傳輸。數據處理在內存中使用統一數據模型表示,將各種數據模式的數據轉換成對象模型進行數據處理,采用ObjectMessage直接將數據處理結果RowSet對象進行序列化傳輸,減少了CPU的消耗。控制信息多用鍵值對表示相關信息的屬性值,采用MapMessage進行控制信息傳輸。控制消息的發送采用同步非持久化機制,數據消息采用異步持久化進行數據收發。
3.3作業執行
數據集成作業對數據進行流水線處理。Server節點接收job分解成一系列的task,根據特定算法將任務發送到各個節點;node節點接收任務、根據指令運行任務、處理數據并將數據發送到下個任務所在的節點。Node節點上一個任務對應一個線程,通過這種并行流水線的方式提高ETL執行效率。
3.3.1任務分配
Node節點會定期匯報節點資源狀況及任務執行狀態,Server節點根據節點信息進行任務分配和負載均衡。在后臺引入“slots”作為資源的邏輯單元進行資源管理。使用ETL進行數據集成過程很長,而且集群資源動態變化,網絡狀態不穩定,無法準確估計任務時間。為避免某個節點負載過重,任務分配采用負載均衡思想。任務之間需要進行數據塊傳輸,在負載均衡的情況下,盡量將有依賴關系的任務分配到一個節點上運行。流程如下:①計算集群node的slots、slotsum;②建立作業需要的slot,設計中如果沒有就特別指定,一個任務使用一個slot;③平衡因子factor=min(slots/(slotsum-已經使用的slot),1);④計算每個節點可使用的slots=factor*(slotsum-已經使用的slot);⑤進行任務分配,任務隊列進行排序(任務隊列構建時采用廣度優先算法);⑥生成任務分配關系。例如節點1可利用的slots為3,則將任務的前3個任務分配給節點1。
3.2.2任務執行流程
Node 節點通信組件監控消息隊列并進行消息處理,接受server指令實例化任務;如果是數據抽取任務,則根據數據源信息進行數據抽取。control監控數據塊大小,滿足條件發送數據;如果是轉換任務和加載任務就掛起,control接收到數據塊就喚醒任務線程。
4結語
ETL是一類從數據源中抽取數據并進行清洗轉換的工具,能夠很好地滿足數據集成需求。使用ETL進行數據集成時,面臨工作量巨大、集成效率低等問題。本文提出一種分布式ETL框架,并行處理數據執行任務。流程為:首先對ETL過程進行描述,給出xml描述結構,為數據處理提供執行計劃;然后調度器server將具有先后依賴關系的任務分發到各個節點;最后由各節點執行任務,組成具有邏輯關系的流水線進行數據處理。本框架設計增加了數據吞吐量,提高了數據處理能力。
參考文獻參考文獻:
[1]鐘華,馮文瀾,譚紅星,等.面向數據集成的ETL系統設計與實現[J].計算機科學,2004,31(9):152156.
[2]張瑞.ETL數據抽取研究綜述[J].軟件導刊,2010,9(10):164165.
[3]鐘巧華.數據倉庫的數據抽取技術研究[J].計算機工程,2004,30(1):6263.
[4]張旭峰,孫未未,汪衛,等.增量ETL過程自動化產生方法的研究[J].計算機研究與發展,2006, 43(6): 10971103.
[5]趙曉君.基于JMS和XML的異構數據庫集成研究[D].武漢:武漢理工大學,2005.
[6]萬軍.基于JMS和XML的數據交換模型設計與實現[D].蘇州:蘇州大學, 2005.
[7]龐新巖.基于ActiveMQ的企業服務總線研究與實現[D].杭州:浙江工業大學,2015.
責任編輯(責任編輯:杜能鋼)endprint