传统ETL通常都是采用昂贵的ETL工具(Datastage、SSIS等)基于高性能的小型机完成。这种方式已经难以满足“大数据”时代下TB甚至PB级的数据ETL需求,如何在有限的时间内,高效高质量的完成海量数据的ETL工作,对ETL技术的架构设计也提出了更高的要求。

目前主流的解决方案是通过对传统ETL进行横向扩展,将ETL工作转化为并行或分布式的架构,从而缩短数据处理时间。目前基于分布式的ETL技术架构有以下两种:

3.1 基于多Agent方式的ETL技术架构

该方法是将多Agent系统技术⋯1引入到分布式计算环境中,该分布式ETL框架把数据抽取、数据转换和数据加载分别对应成各个Agent,同时把每一个模块比如元数据管理、作业管理和转换函数管理等各对应到一个Agent,然后利用Agent之间的协作性、主动性和交互性来构建分布式ETL框架。

etl 数据仓库项目(数据集成技术三)(1)

图1

上图给出了基于Agent的分布式ETL架构。其中”ETL任务设计”模块向用户提供ETL工作流的设计界面。”ETL任务管理”模块则是分布式ETL的协调中心,向上(用户)承接ETL作业的上传、转换函数的定义和日志浏览功能,向下(ETL执行)基于元数据提供ETL作业转换规则和作业调度。”ETL任务执行”模块则是具体的执行引擎,分布在各个实体服务器上。通过各个Agent协作完成ETL的任务。

这种架构可以较好的解决分布式系统中的负载均衡问题,而且也能够实现准实时的数据解析和入库。但是该方式不能较好的保证各个Agent的稳定性,一旦某个Agent出现故障,将会使整个系统处于崩溃状态,甚至有可能导致数据的丢失。

3.2 基于MapReduce的ETL技术架构

hadoop技术在其诞生之初就是定位于大数据的存储、分析。所以在hadoop框架下基于MapReduce实现ETL也是很多企业自然而然的选择。

etl 数据仓库项目(数据集成技术三)(2)

图2

上图中给出了一个典型的基于MapReduce的ETL技术架构。 服务端主要包括元数据管理模块、执行引擎模块、数据访问模块。元数据管理模块是系统的基础模块,它描述了系统中所有数据结构的定义,提供元数据存储、访问的服务。系统的其他模块通过公共接口从元数据管理模块获得元数据信息。另外,元数据管理模块提供接口用来导入导出元数据。执行引擎模块是系统的核心模块,又分为流程解析和流程执行两个模块。在流程解析模块,执行引擎获取执行流程的元数据信息,根据这些信息,生成相应的工作流。流程执行模块完成从数据转换到数据解析的所有任务。数据访问模块提供公共的数据访问接口,它屏蔽了各种数据源之间的差异,以一种统一的方式对数据进行查询、删除、修改。

在基于MapReduce的ETL技术框架下,开发人员只需要Map和Reduce两个函数进行数据转换的并行处理,并基于hadoop生态圈所提供的API接口进行数据抽取和加载。这样可以提高开发效率,而且系统的并行处理能力也有成熟hadoop生态圈得以保证。但是MapReduce程序启动较为耗时,并不适用于数据的实时加载和入库,而且MapReduce作业流程的优化也需要投入大量的时间。

,