程聪
【摘 要】随着信息化以及大数据快速发展,结构化、半结构化、非结构化的数据越来越多,结构越来越繁杂,传统的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.