APP下载

面向数据集成的分布式ETL研究与设计

2017-12-02张孟春

软件导刊 2017年11期
关键词:数据集成分布式

张孟春

摘要:针对数据分析融合平台建设中数据集成开发效率低、数据集成慢和数据网络分散等问题,提出跨网络传输的分布式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过程描述结构如下:

<!—job基本信息描述,包括作业名称、作者、提交时间等-->

taskname

nexttaskname

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

猜你喜欢

数据集成分布式
基于预处理MUSIC算法的分布式阵列DOA估计
XML数据交换技术在中医智能化诊断数据集成中的应用
高校一表通系统建设探究
基于数据集成的水上项目国家队数据库网络管理平台的设计与开发
西门子 分布式I/O Simatic ET 200AL
家庭分布式储能的发展前景