程聰
【摘 要】隨著信息化以及大數據快速發展,結構化、半結構化、非結構化的數據越來越多,結構越來越繁雜,傳統的ETL已經在數據整合方面存在很大的瓶頸,在可擴展性以及穩定性方面存在很大的弊端。文章介紹了OSGI框架的技術特性,基于OSGI框架Equinox開發實現的hbust ETL的體系結構,最后詳細、著重地論述了hbust ETL核心bundle及其插件擴展點的設計與實現方法。hbust ETL具備很好的數據整合可擴展性以及穩定性,特別在處理當下的大數據方面,具備很大的優勢,不同bundle處理不同版本的hadoop、hive、hbase等等,不同版本大數據處理,可通過開發可擴展的bundle,發布于OSGI容器,不用修改ETL源代碼,即可進行該版本數據整合處理。
【關鍵詞】SOGI ?bundle;插件擴展點;ETL;數據處理
中圖分類號: TP311.52;TP399-C1 文獻標識碼: A 文章編號: 2095-2457(2019)03-0001-007
DOI:10.19694/j.cnki.issn2095-2457.2019.03.001
OSGI-based ETL design and implementation
CHENG Cong
(Hubei university of science and technology,School of computer science and technology,Hubei Xianning 437000, China)
【Abstract】With the rapid development of informatization and big data, there are more and more structured, semi-structured and unstructured data, and the structure is more and more complex. The traditional ETL has great bottlenecks in data integration, and great drawbacks in scalability and stability.The technical features of the OSGI framework, the architecture of the hbust ETL developed based on the OSGI framework Equinox, and the design and implementation of the hbust ETL core bundle and its plug-in extension points are discussed in detail and emphatically.hbust ETL has good expansibility and stability for data integration, especially in dealing with the current big data, have a lot of advantages, different bundle deal with different versions of the hadoop, hive, hbase, and so on, different versions of the data processing, but by developing extensible bundle, released on OSGI container, don't need to modify the ETL source code, this version can be made data integration process.
【Key words】SOGI; Bundle; Plug-in extension point; ETL; Data process
0 引言
ETL(Extract-Transform-Load)作為現在一種通用的數據遷移、裝載的數據處理工具,面對當今大數據、人工智能飛速發展的時代,ETL必須具備可擴展性,對接各種類型的關系數據庫、NoSQL數據庫、Hadoop、hive以及hbase等等繁雜存儲結構的數據以及各種各樣的基于規則的數據清洗。這些數據包括結構化、半結構化、非結構化數據,并且非結構化的數據越來越多。OSGI框架本身支持模塊化的動態部署,模塊的動態擴展,這種框架應用于ETL,各種類型數據在OSGI的框架容器的bundle中能夠獨立處理,使得ETL的動態可擴展性、系統穩定性大大提高。
1 OSGI框架
OSGI(Open Service Gateway Initiative)技術是Java動態化模塊化系統的一系列規范,Java平臺的模塊層。OSGI框架一般具備的基礎功能:(1)支持模塊化的動態部署。基于OSGI而構建的系統可以以模塊化的方式動態地部署至框架中,從而增加、擴展或改變系統的功能。(2)支持模塊化的封裝和交互。每個工程(模塊)可通過聲明Export-Package對外提供訪問此工程的類和接口。(3)支持模塊的動態擴展。基于OSGI提供的面相服務的組件模型的設計方法,以及OSGI實現框架提供的擴展點方法可實現模塊的動態擴展。(4)模塊化的設計。在OSGI中模塊由一個或多個bundle構成,模塊之間的交互通過Import-Package、Export-Package以及OSGI Service的方式實現。(5)動態化的設計。動態化的設計是指系統中所有的模塊必須支持動態的插拔和修改,“即插即用,即刪即無”。(6)可擴展的設計。通常使用定義擴展點的方式。按照Eclipse推薦的擴展點插件的標準格式定義bundle中的擴展點,其它要擴展的bundle可通過實現相應的擴展點來擴展該bundle的功能。(7)每個bundle擁有獨立的classloader,通過它來完成本bundle類的加載。(8)穩定、高效的系統。基于OSGI的系統采用的是微核機制,微核機制保證了系統的穩定性,微核機制的系統只要微核是穩定運行的,那么系統就不會崩潰,也就是說基于OSGI的系統不會受到運行在其中的bundle的影響,不會因為bundle的崩潰而導致整個系統的崩潰。
目前比較成熟、流行的OSGI框架有Equinox、felix。Equinox是Eclipse的項目,并作為OSGI R4 RI而知名,目前隨著Eclipse的版本而發布的,同時也提供獨立的下載。Equinox除了完整實現OSGI R4規范以外,還吸取了Eclipse的插件擴展點機制,bundle通過發布擴展點的方式來定義bundle可擴展部分,當需要擴展bundle的時候只需要實現bundle提供的擴展點的接口就可以了,通過這樣的方式就可以完成bundle的擴展。
2 hbust ETL
傳統的ETL工具模塊可擴展性差,一般只內置幾種常見的數據處理組件。信息化數據中心建設中,結構化數據、半結構化數據、非結構化數據等各種存儲結構的數據,越來越繁雜,也越來越多,通常就是我們現在所說的大數據。傳統ETL在處理各種結構類型的數據,具有不適應性,一般只能通過修改源代碼內置需要整合處理的數據處理方案,可擴展性、穩定性得不到保障,也影響系統數據處理的性能。
本文介紹的ETL(hbust ETL)正是基于OSGI框架的Equinox進行開發,每個模塊作為一個獨立的bundle,bundle內部可以定義擴展點,本bundle或其它bundle可以擴展實現該擴展點。整體大的模塊bundle分為engine bundle、database handler bundle、file handler bundle、transform rule bundle、 hadoop bundle、hbase bundle、hive bundle以及common bundle、other bundles等等。
2.1 hbust ETL設計:
圖1,服務器:采用OSGI的體系結構,每個功能模塊都是一個OSGI bundle。其中執行引擎bundle定義了流程節點擴展點,數據清洗轉換規則bundle定義了基于規則的數據清洗擴展點,數據庫讀寫處理器bundle定義了數據庫讀寫處理擴展點,大數據處理bundle定義了大數據處理擴展點等等。系統內置的組件和用戶擴展的組件都統一通過擴展點的方式實現,流程執行時通過查詢系統擴展點信息來加載相應的類并執行。
2.2 hbust ETL執行引擎
hbust ETL中的流程包括數據流和控制流,其流程的結構是任意的,即任何結構的流程,只要其屬性配置正確即可被執行。hbust ETL中的流程表示為一個節點和邊組成的有向無環圖。流程的執行就是遍歷有向圖的過程。一個典型的流程圖如圖2所示,方框表示活動節點,帶有箭頭的線表示節點活動之間的關系。
圖1中的開始節點和結束節點是系統在流程執行之前自動加上的,流程的執行從開始節點啟動,直到結束節點執行完成則整個流程執行完成。每個節點執行完自己的功能后再根據邊的指向找到下一個節點并啟動。
hbust ETL控制流
控制流的執行過程如圖3所示,虛線箭頭代表一個線程,從下圖中可以看出,每個節點的功能由進入該節點的線程執行,該線程執行完當前節點的功能后,再跟邊的指向執行下一個節點。如果當前節點有多個輸出則,則每個輸出都有一個對應的線程去執行該輸出指向的節點。如果一個節點有多個輸入,則該節點需要等到多個線程都到達時才能開始執行,此時該節點可以歸還一個線程,只保留一個線程繼續執行。
數據流的執行過程如圖4所示,與控制流相比,數據流的節點的遍歷和執行是由不同的線程完成的,數據流節點遍歷的過程和控制流類似,只是對于數據流來說,遍歷的過程只是配置節點屬性和啟動節點線程,具體的數據處理是由每個節點自己的線程完成的。與控制流不同,數據流只有當所有的數據都處理完畢或者出錯才結束。
流水線是一個FIFO的同步隊列,上一個節點的線程將數據發送到隊列中,下一個節點則從隊列中取數據。
數據流節點的結構:
一個數據流的節點由輸入點、輸出點、容器和數據處理器4部分組成,如圖6所示:
輸入點和輸出點的個數決定了節點可以連接的輸入和輸出數量。節點容器實現節點的通用功能包括節點屬性的讀取、節點事件的發送、日志和統計信息的記錄、故障恢復、數據分區。
數據處理器實現具體的數據處理邏輯。容器根據當前節點的類型創建相應的數據處理器的實例后在一個獨立的線程中啟動它,數據的讀取、處理和發送都是數據處理器線程中執行。
2.3 hbust ETL核心模塊bundle
2.3.1 Engine bundle
定義了擴展點"com.hbust.etl.engine.activities"。控制流節點需要擴展節點類型type和節點活動類名activityClass;數據流節點需要擴展節點類型type和節點活動類名activityClass,以及節點角色role,角色role分source、transformation以及destination三種,方便數據流節點抽取、轉換或裝載數據。
(2)擴展實現內置的流程活動節點
2.3.2 database handler bundles
"com.hbust.etl.engine.activities"活動擴展點中,我們看到TableSource以及TableDestination的活動,涉及到數據庫讀寫相關的處理,目前不同的ETL使用場景,可能使用不同的數據庫,極可能出現場景中的數據庫在ETL沒有內置,在不修改ETL源代碼的情況下,可以單獨開發bundle來對應未有內置的數據庫的訪問處理。所以在數據庫讀寫訪問這塊,使用bundle以及插件擴展點的機制,完全可以進行各種數據庫讀寫的訪問。
(1)各種數據庫的通用操作,供其它特定的database handler bundle以import package或require bundle方式進行復用。
(2)定義數據庫處理擴展點。擴展點的定義與engine bundle的activity擴展點類似,定義數據庫的類型、版本以及數據庫操作的接口,在各自數據庫內實現擴展該擴展點,實現數據庫操縱的接口的實現。
各種數據庫自己的bundle:
各種類型的數據庫,包括每種數據庫不同版本,實現一個bundle,該bundle內部擴展實現該數據庫處理擴展點。這樣一來,每個bundle可以加載自己的JDBC,創建自己的數據庫連接,供engine bundle的連接池來管理,供engine bundle數據處理器使用。
2.3.3 Transform rule bundle:
"com.hbust.etl.engine.activities"活動擴展點中,我們也看到TransformRuleActivity活動,該Activity利用這種各樣的清洗規則對數據進行轉換清洗。同樣,我們在系統不可能內置所有的清洗規則,在實際應用場景,必須要擴展注入某些清洗規則來清洗數據。在不修改ETL源代碼的情況下,同樣可以開發額外的數據清洗bundle,這些bundle擴展實現Transform rule bundle中定義的擴展點,實現數據清洗轉換類。
(1)定義數據清洗規則擴展點。擴展點的定義與engine bundle的activity擴展點類似,定義數據清洗規則類型、數據清洗的接口,在各自數據清洗bundle內實現擴展該擴展點,實現數據清洗的接口的實現。
(2)實現數據清洗規則擴展點,然后注冊,供engine bundle數據處理器使用。
2.3.4 其它模塊bundle
各種文件的讀寫操作可放在common bundle進行擴展、注冊。當今的大數據的處理,比如hadoop、hive、hbase以及nosql數據庫的處理,同樣可以使用bundle以及插件擴展點的機制,對它們的各種版本的數據操作處理進行注冊,然后根據版本類型獲取自己的數據操縱類,進行數據的訪問。篇幅有限,不一一描述擴展點的定義以及擴展實現。
3 結束語
該文介紹了OSGI框架的技術特性,基于OSGI框架Equinox開發實現的hbust ETL的體系結構,hbust ETL核心bundle及其插件擴展點的設計與實現。hbust ETL利用OSGI bundle以及插件擴展點機制,大大地提升了ETL的可擴展性、系統穩定性。面對當今各種復雜的數據處理,不修改源代碼的情況下,直接開發bundle擴展已經定義的擴展點,完成各種類型的數據處理,包括大數據的處理。
【參考文獻】
[1]林昊,曾憲杰.OSGi原理與最佳實踐電子工業出版社.
[2]林昆.面向數據倉庫的ETL工具的研究與實現計算機技術與自動化,2018,01.
[3]王欣.數據集成技術若干問題的研究:[博士學位論文].上海交通大學2016.