IBM InfoSphereDataStage是业界较为流行的ETL(Extract,Transform, Load)工具。它支持各种数据源和文件格式,可以满足大规模数据ETL需求。功能强大,可适用于多种类型的业务场景。而且比较灵活,拓展性强。
DataStage的应用程序设计采用图形界面[8]。用户只需把各种数据输入、不同转换和数据输出组件拖放至作业设计界面中,并且把表的查询、排序和汇总等数据运算步骤形成网状结构即可。数据输入包括文件以及需要捕捉增量数据或全量数据的异构表。ETL过程还需要对这些文件或数据库的值进行比较。DataStage核心是服务引擎。数据库的连接、底层SQL语句执行和文件的差异比较等都是由服务器引擎执行的。数据行以流的形式在整个转换链中转移,最后完成多目标写入。
InfoSphereDataStage优点是功能强大,性能和伸缩扩展性强。缺点是价格昂贵,日志繁多且不利于维护和升级。因此对于有专业的数据团队的企业来说显得太过重量级。它具有以下功能:
从各种通用的数据源抽取数据。
合并数据验证规则。
一些大数据量的转换步骤的并行执行。
处理非常复杂的变换。
管理多个集成过程。
可直接连接到作为源或目标的企业应用程序。
利用元数据进行分析和维护。
以批处理、实时或WebService方式操作。
与大多数流行的ETL工具类似,在DataStage开发流程中存在两个重要的概念:Job和Stage[9]。Job是一个完整的运行单元,对应一个ETL任务,关联着数据源表和目标表以及一些列的数据清洗转换工作。Job是由许多Stage按照业务规则构成的,一个Stage就是一次数据转换计算。
DataStage架构是经典的客户端/服务器架构,项目和元数据在服务器端存储,客户端之一的DataStageDesigner是一个图形化的作业设计器,它的ETL整个过程设计都是通过拖拉和自定义组件(Stage)的方式进行的。DataStage运行的最小单元是各种Job,它们都是在Designer中按照业务规则的流程定制好的。DataStage中的Job有三种类型:ServerJob, Parallel Job和MainframeJob,最后一种Job并不常见,适用范围是大型机,而后两者的Job较为常用。
在这三种类型中,ServerJob最为普遍(如图2.1),功能简单而实用,当然他也是使用拖拽Stage加连线的方式进行设计。ServerJob具有的Stage组件所具有的功能有数据的抽取、流动、汇聚、转换、过滤等。
图流行ETL数据传输解决方案.2一个典型的ServerJob设计
ServerJob因为比较普遍,所以虽然功能较为简单但能处理很大一部分数据处理场景。与之不同的是,ParallelJob具有并行的特点,多条工作流水线并发执行大大提高了ETL过程的效率。在Stage方面,ParallelJob有更多的种类,但因为并行机制的存在,也就具有了更多的限制。
与上面两种类型不同,SequenceJob并不独立(如图2.2)。而是用来控制各种Job的衔接和流程,从而让他们成为一个整体,此外,它还可以用来指定作业的错误流,从而进行作业调试。
Job是由多个转换构成,每个转换就是一个Stage.。每种Job有不同的Stage,对应ServerJob,他就有:General、Database、File、Processing、RealTime五种类型。此处仅举例说明:SequentialFile Stage 用来一个Sequential文件当做数据输入来源或者数据输出目的,在使用时需要注意文件的格式,列信息等。Transfor-merStage负责ServerJob中各种转换操作,在TransformerStage中可以指定的东西有:输入字段和输出字段的匹配规则,字段之间的转换规则、字段的约束条件以及字段的过滤条件等。
与其他类型的Job相比,ParallelJob的Stage种类更为繁多,增加了调试、事务等类型的Stage。同时,对于比较、查询和连接等Stage,Paralleljob也有自己的对应。另外由于ParallelJob是并行的,所以在开发作业时,我们需要指定如何分区和合并的策略。以下仅举例说明主要的:ParallelSort Stage 对数据行按照某字段进行排序,支持升序和降序;Compare,Difference和ChangeCapture Stage 用来比较两个数据集合的数据的异同;FilterStage是用于数据过滤,用户可以自定义逻辑表达式根据数据行某字段来过滤。
图流行ETL数据传输解决方案.3一个典型的SequenceJob设计
IBMWebSphere DataStage的开发环境是基于C/S模式的,通过DataStageClient连接到DataStageServer上进行开发。InforSphereDataStage的Client由三部分构成:Administrator、Director、Designer,这三部分通过访问公共服务层来获取数据集成功能(如图2.3)。具体分析如下:
设计器(Designer):用于在图形界面设计作业整个流程。
导向器(Director):用于在图形用户界面对作业流进行调度、运行和监视。
管理器(Administrator):项目和用户管理的图形用户界面。
图流行ETL数据传输解决方案.4 DataStage架构图
设计器这一块可以对照上节内容,实际中Job设计好之后还需要编译和验证的步骤。管理器比较直观。这里主要介绍DataStage的日志、调度、监控和集群运行方式。
Director日志是以Job为单位的,Job运行失败可查看日志进行调试。Director还能对Job的运行情况起到实时监控的作用,生产环境中一道作业的数据量和运行时间都比较长,实时监控Job的运行显得尤为必要。通过监控Job的实时运行的数据流统计并结合日志分析,可以对异常Job进行调试或者分析Job的瓶颈。
正常生产环境我们需要要用到DataStage的调度功能。DataStage的调度功能与quartz相似,可以执行执行周期为时、日、周、月等。要调度一个Job,只需要在Director中选定Job,在主菜单中选择Job->Addto Schedule,即可设置Job的调度策略。
下面讲述作业的并行机制以及DataStage的集群。而在DataStageETL分布式的集群中,每个作业会在运行开始时被调度到特定的机器,可能是同一台机器也可能是集群内别的机器。对于并发来说,DataStage的并行引擎会使用多个进程并发的完成这些作业。并行引擎也是DataStage集群引擎的一部分。
DataStage集群由多个服务器引擎拓扑网络构成(如图2.4)。服务器引擎拓扑网络中的主节点叫HeadNode,而普通节点叫ComputeNode。数据处理过程由HeadNode主导,HeadNode发送数据处理命令给ComputeNode。与单机版的DataStage相比,DataStage集群的数据处理速度和规模都有极大的提高。此外,DataStage集群容加入新的系统节点也非常容易。至于作业具体运行在哪台机器上,这是由配置文件具体指明的。
图流行ETL数据传输解决方案.5 DataStage集群运行模式
Kettle是Pentaho公司基于敏捷开发方法开发的BI套件。Kettle的设计原则是:易于开发,使ETL开发者把时间放在创建BI解决方案上;避免自定义开发,尽量提供标准化控件;所有功能都通过用户界面完成,但实际上仍然需要一些配置文件在各个组件之间传递信息;透明,不用让用户了解每一步的内部实现;灵活的异构数据交换,Kettle可以对各条作业流水线复制或者分发数据,再从各作业流水线合并数据;只映射需要映射的字段,在Kettle中所有未指定的字段都自动传递到下一个组件,这个原则极大的减少了维护成本。
Kettle的优点[10]是以开发和应用领域里流行的Java平台为基础开发出来的,具有较好的移植性。可以在多种操作系统上运行。易用性好,封装程度较高。缺点是维护和调试较为困难,集群不够灵活和并发的利用不够充分。而且稳定性有缺陷,对于企业大规模生产环境不太适合。
Kettle的ETL数据整合主要由转换(Transformation)和作业(Job)两大部分完成[11]。Kettle的ETL过程在图形界面上看是一个有向无环图(如图2.5),节点代表作业或转换步骤(Step),边则是节点连接(Hop)。
转换(是由多个步骤(Step)所组成的工作流,每一个步骤是一个特定的转换操作。节点连接(Hop)负责步骤与步骤之间的信息关联。转换是数据逻辑结构和数据值的调整。转换是ETL过程体现业务逻辑的部分,是数据仓库对数据要约的体现。
转换之间或者转换的步骤之间的信息通讯叫做跳(Hop),跳是一个数据单向流动的过程。与大多数ETL工具一样,数据流动的单位是行。
如上文所述,作业项的连接就构成了工作流。连接方式有:无条件连接,成功则连接,失败则连接。此外还有若干个辅助结点单元:
Start单元,这是设计所有任务的起点组件,是执行的入口。
OK单元:这是条件判断单元,前置流程成功则进行后面流程,可用脚本进行编制。
ERROR单元:这是条件判断单元,前置流程失败则进行后面流程。
DUMMY单元:用于某组件结点出现多个执行结果的单元。
图流行ETL数据传输解决方案.6一个典型的Kettle作业项设计
作业由若干个作业项构成(如图2.6),这些作业项之间的逻辑顺序由跳(hop)的连接来决定。所有作业项构成了整个作业的ETL操作。
另外,你的数据库连接也必须提前定义好。
图流行ETL数据传输解决方案.7作业与作业项
Kettle的ETL设计组件由Spoon、Pan、Chef、Kitchen[12]这四个产品组成。他们涵盖ETL的整个生命周期:
Spoon 是ETL作业设计器,使用图形界面。
Pan 是控制台命令。因此可以用脚本运行多个ETL作业。
Chef 用来创建任务(Job)。与Spoon不同的是这里是任务层次的设计,一般都要内嵌Spoon设计的作业项。任务通过多个转换,转换的脚本等等,自动化更新目标数据仓库。任务运行结束时,还会有数据质量检查。
Kitchen 运行Chef设计的任务,按照你一定的顺序。Kitchen也是一个后台运行的程序。可以指定执行人,日志文件,存储目录等。
Chef也是一个图形用户界面,主要是通过拖拽各种转换组件来完成任务设计。多个作业项按照逻辑顺序组成一道作业。比如用数据的数据生成日志文件,那么作业项将是:并行加载、筛选字段、转换和输出到日志文件。Chef中的主要作业项有:转换,这里是Spoon设计的一个任务,包含若干个转换;SQL,Sql语句执行,来从数据库获取数据;邮件,发送邮件;执行Shell脚本、Dos命令或者批处理;Job包,作为嵌套作业使用;JavaScript执行,就是执行JavaScript代码;SFTP,安全的Ftp协议传输;HTTP方式的上/下传。
另外,LogView组件可查看执行日志。下面简单列举一下典型的转换过程(在SPOON中):
输入。Textfile、XMLand Excel input:输入为文本文件、XML文件和Excel格式的文件;TableInput:输入为数据库的表,实际执行的是Sql语句;GenerateRows:有些字段需要额外生成,比如自增的主键;
输出。TextFile、XMLand Excel Output:各种文件类型输出;TableOutput:输出到目的表;Insert/Update:这里数据输出的方式是插入和更新,需要先用主键匹配输出中的同一行;
转换。SelectValues:字段的类型、名称或者值的修改,映射成为新的数据列;FilterRows:按照各种条件过滤数据行,相当于Sql里的Where子句,但功能有所加强;SortRows:按某个字段对数据行进行排序;JoinRows:多个输入流的数据当做多张表进行Join操作;Aggregate:聚合,分组处理;Groupby:用某个字段进行分组,可以使用聚合函数;Calculator:自定义的聚合函数和工具函数;MergeRows:相似的数据进行合并,可以选择合并规则(如选择更新的数据);AddConstants:增加常量值。
在实际生产环境中还需要监控调度过程和运行结果,Kettle也有两种调度方式:
操作系统级调度:现代操作系统都有调度功能。类UNIX系统的Cron命令和Windows系统的计划任务。操作系统的调度都是用命令行的方式运行Kettle作业。所以这里用Kitchen,Pan命令。
内置在PentahoBI Server里的Quartz调度:Kettle是PentahoBI组件的一员,很多Kettle用户也使用用户的Pentaho的BIServer。内置在PentahoBI Server里的调度程序可以执行一个包含有Kettle作业的ActionSequence(ActionSequence是PentahoBI Server的工作流)。
Kettle作业只要有两种主要的监控方式,日志和邮件。在生产环境中,Kitchen和Pan命令可以通过Logfile参数来指定一个日志文件。此外,Kettle还有很多日志级别,主要的包括错误日志,基本日志和行级日志三个级别。而邮件通知是通过作业里的发送邮件作业项来完成的,把这个作业项集成到你的作业里的错误分支中。
Kettle中的每个步骤都是一个线程。多线程的可以利用数据行分发、并行执行和再合并的方式来利用。也可以单纯的每一个步骤设计多线程执行方式。当然你也可以对表分区,每个分区并行执行。
Kettle的集群方式和多线程运行模式有些类似。使用上首先要定义一些Carte子服务器,Carte子服务器是一个轻量级的服务进程,用来远程执行转换和作业。然后在Spoon中新建集群模式,加入所有机器。然后你就可以让一个作业以集群的方式运行,每个选定的子服务器上都有一个并行运行的进程。与Kettle并发方式相比,只不过是把调度单位从线程换成了进程
Kettle的集群方式运行时对任务的生硬分拆,看似解决了负载均衡问题,实际上加入了合并等重量级的远程交互过程,会造成大量集群内部的io从而让网络成为集群运行的瓶颈。在较大规模的ETL过程中并不适合。
Talend是一家针对的数据集成工具市场的ETL开源软件供应商。Talend把自己的技术和商业模式结合起来,提供开源的、创新的、强大而又灵活的解决方案。Talend的ETL开源软件同时满足了大中小企业的数据集成与应用集成需求,这与前面的两款工具。
Talend的ETL解决方案可以实现的功能包括数据集成,ETL,数据质量,主数据管理(MDM),应用集成等。而且性能稳定,使用便利,易于扩展。因而具有在全球有较大的市场份额。
Talend的ETL开发流程中。核心概念是项目库(Repository)、任务(Job)、组件(Component)和连接(Row)。
项目库包括业务模型(BusinessModels)[13],作业设计(JobDesigns),元数据(Metadata),上下文(Context),代码(Code)和文档资料(Documentation)。JobDesign是作业设计器。Metadata是数据源(包括数据库连接、文件等)元数据管理。Context是全局变量,用在转换组件中。Code是作业生成的代码。Documentation是文档资料。
任务是TalendETL平台调度运行的基本单位。任务由组件和连接构成。组件类型有很多种[14],主要有:
云组件:这里的云是指亚马逊的云服务。
用户代码:用户自定义的ETL代码。
数据质量组件:检查输出数据质量。主要通过模板比较,格式检查和自定义代码检查等方式来控制。
数据库组件:主要负责数据库的连接。可以自定义读取或写入的sql和存储过程。
Net组件:这个组件主要是用来获取http资源文件。
文件组件:适用于输入或者输出是文件的场景。
过程组件:这类组件承担了大部分的数据转换工作。包括过滤、映射、替换等。
系统组件:这类组件主要是负责和操作系统互动。比如SSH连接、CMD连接等。
XML组件:负责XML文件的解析等职责。
Talend的作业设计都是利用TisStudio(新版本叫TalendOpenStudio)来完成的(如图2.7)。在导入之前我们要在项目库Repository的Context目录下设计上下文变量。然后在Metadata目录下指定文件或数据库表的元数据,并把这些元数据拖到JobDesigner工作区生成输入输出组件。接着就是拖动右边Palette的组件来完成数据的清洗和转换工作。
图流行ETL数据传输解决方案.8TalendOpen Studio和作业设计
图流行ETL数据传输解决方案.9 Talend架构图
Talend的模块分为多个部分(如图2.8),包括项目元数据、用户元数据、执行机、Web控制台、还有用来作业设计的TisStudio等。这一切的核心是TalendAdministration Center模块。用户在TisStudio中设计作业的操作有:设置连接、添加或获取元数据,设计ETL流程,最后调试运行。TalendAdministration Center接受到运行命令后把任务调度到执行机上运行并实时监控任务。Web控制台与TalendAdministation交互,对任务进行实时管理。
Talend的调度与Kettle类似,也可以用操作系统的调度和本身的调度机制。用操作系统调度需要把作业导出成一些脚本和Jar包,这样你可以用操作系统的Crontab机制来自己运行,运行命令为java-jar。而用Talend的自身的调度机制,则需要指定每个作业的执行计划。Talend的执行计划也是通过Quartz实现的。
Talend的集群采用Master-Slave结构。Master是TAC(TalendAdministration Center)。而Slave是JobServer若干台。每一台JobServer都提供JobService远程服务,来运行执行的Job。同时JobServer有心跳机制会远程汇报自己的负载。TalendClient(TisStudio)会把Job转换成代码和脚本,然后TAC根据JobServer的负载选择一台执行机,把Job资源发布到其上,调用远程服务运行它。同时Talend还可以为TAC搭建用来FailOver的Tomcat集群,有效保证了稳定性。
这几种ETL工具各有优劣(如表2.1):DataStage功能强大,但比较重量级,开发和维护成本高。Kettle比较轻量级和用户比较友好,但稳定性较差,并发性能一般。Talend介于两者之间,使用较为方便,稳定性好,传输性能差于两者。
表流行ETL数据传输解决方案.1几种ETL工具的比较
指标 |
Talend |
DataStage |
Kettle |
增量传输支持 |
CDC,事件机制 |
CDC |
CDC |
异常处理 |
邮件通知,日志捕获 |
邮件通知,日志捕获 |
邮件通知,日志捕获 |
是否开源 |
是 |
是 |
否 |
并行性能 |
较好 |
一般 |
一般 |
监控日志 |
一般 |
较好 |
一般 |
开发难度 |
较低 |
一般 |
较低 |
开发成本 |
低 |
高 |
低 |
传输性能 |
一般 |
好 |
较好 |
稳定性 |
较好 |
较好 |
一般 |
易用性 |
一般 |
差 |
较好 |
本章主要是分析了国内当前流行的ETL解决方案。考虑到相关方案的流行性和代表性。我们选取了比较重量级的IBMDataStage产品、在中小企业比较流行的较轻量级的PentahoKettle产品以及介于两者之间的Talend解决方案作为典型介绍。