流行ETL数据传输解决方案

2.1IBMDataStage解决方案

2.1.1IBMDataStage简介

IBM InfoSphereDataStage是业界较为流行的ETL(Extract,Transform, Load)工具。它支持各种数据源和文件格式,可以满足大规模数据ETL需求。功能强大,可适用于多种类型的业务场景。而且比较灵活,拓展性强。

DataStage的应用程序设计采用图形界面[8]。用户只需把各种数据输入、不同转换和数据输出组件拖放至作业设计界面中,并且把表的查询、排序和汇总等数据运算步骤形成网状结构即可。数据输入包括文件以及需要捕捉增量数据或全量数据的异构表。ETL过程还需要对这些文件或数据库的值进行比较。DataStage核心是服务引擎。数据库的连接、底层SQL语句执行和文件的差异比较等都是由服务器引擎执行的。数据行以流的形式在整个转换链中转移,最后完成多目标写入。

InfoSphereDataStage优点是功能强大,性能和伸缩扩展性强。缺点是价格昂贵,日志繁多且不利于维护和升级。因此对于有专业的数据团队的企业来说显得太过重量级。它具有以下功能:

  1. 从各种通用的数据源抽取数据。

  2. 合并数据验证规则。

  3. 一些大数据量的转换步骤的并行执行。

  4. 处理非常复杂的变换。

  5. 管理多个集成过程。

  6. 可直接连接到作为源或目标的企业应用程序。

  7. 利用元数据进行分析和维护。

  8. 以批处理、实时或WebService方式操作。

2.1.2 IBMDataStage开发流程设计

与大多数流行的ETL工具类似,在DataStage开发流程中存在两个重要的概念:JobStage[9]Job是一个完整的运行单元,对应一个ETL任务,关联着数据源表和目标表以及一些列的数据清洗转换工作。Job是由许多Stage按照业务规则构成的,一个Stage就是一次数据转换计算。

DataStage架构是经典的客户端/服务器架构,项目和元数据在服务器端存储,客户端之一的DataStageDesigner是一个图形化的作业设计器,它的ETL整个过程设计都是通过拖拉和自定义组件(Stage)的方式进行的。DataStage运行的最小单元是各种Job,它们都是在Designer中按照业务规则的流程定制好的。DataStage中的Job有三种类型:ServerJob, Parallel JobMainframeJob,最后一种Job并不常见,适用范围是大型机,而后两者的Job较为常用。

在这三种类型中,ServerJob最为普遍(如图2.1),功能简单而实用,当然他也是使用拖拽Stage加连线的方式进行设计。ServerJob具有的Stage组件所具有的功能有数据的抽取、流动、汇聚、转换、过滤等。


流行ETL数据传输解决方案_第1张图片

流行ETL数据传输解决方案.2一个典型的ServerJob设计

ServerJob因为比较普遍,所以虽然功能较为简单但能处理很大一部分数据处理场景。与之不同的是,ParallelJob具有并行的特点,多条工作流水线并发执行大大提高了ETL过程的效率。在Stage方面,ParallelJob有更多的种类,但因为并行机制的存在,也就具有了更多的限制。

与上面两种类型不同,SequenceJob并不独立(如图2.2)。而是用来控制各种Job的衔接和流程,从而让他们成为一个整体,此外,它还可以用来指定作业的错误流,从而进行作业调试。

Job是由多个转换构成,每个转换就是一个Stage.。每种Job有不同的Stage,对应ServerJob,他就有:GeneralDatabaseFileProcessingRealTime五种类型。此处仅举例说明:SequentialFile Stage 用来一个Sequential文件当做数据输入来源或者数据输出目的,在使用时需要注意文件的格式,列信息等。Transfor-merStage负责ServerJob中各种转换操作,在TransformerStage中可以指定的东西有:输入字段和输出字段的匹配规则,字段之间的转换规则、字段的约束条件以及字段的过滤条件等。

与其他类型的Job相比,ParallelJobStage种类更为繁多,增加了调试、事务等类型的Stage。同时,对于比较、查询和连接等StageParalleljob也有自己的对应。另外由于ParallelJob是并行的,所以在开发作业时,我们需要指定如何分区和合并的策略。以下仅举例说明主要的:ParallelSort Stage 对数据行按照某字段进行排序,支持升序和降序;Compare,DifferenceChangeCapture Stage 用来比较两个数据集合的数据的异同;FilterStage是用于数据过滤,用户可以自定义逻辑表达式根据数据行某字段来过滤。

流行ETL数据传输解决方案_第2张图片

流行ETL数据传输解决方案.3一个典型的SequenceJob设计

2.1.3 IBMDataStage架构、集群和调度

IBMWebSphere DataStage的开发环境是基于C/S模式的,通过DataStageClient连接到DataStageServer上进行开发。InforSphereDataStageClient由三部分构成:AdministratorDirectorDesigner,这三部分通过访问公共服务层来获取数据集成功能(如图2.3)。具体分析如下:

  1. 设计器(Designer):用于在图形界面设计作业整个流程。

  2. 导向器(Director):用于在图形用户界面对作业流进行调度、运行和监视。

  3. 管理器(Administrator):项目和用户管理的图形用户界面。

流行ETL数据传输解决方案_第3张图片

流行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数据传输解决方案_第4张图片

流行ETL数据传输解决方案.5 DataStage集群运行模式

2.2PentahoKettle解决方案

2.2.1PentahoKettle简介

KettlePentaho公司基于敏捷开发方法开发的BI套件。Kettle的设计原则是:易于开发,使ETL开发者把时间放在创建BI解决方案上;避免自定义开发,尽量提供标准化控件;所有功能都通过用户界面完成,但实际上仍然需要一些配置文件在各个组件之间传递信息;透明,不用让用户了解每一步的内部实现;灵活的异构数据交换,Kettle可以对各条作业流水线复制或者分发数据,再从各作业流水线合并数据;只映射需要映射的字段,在Kettle中所有未指定的字段都自动传递到下一个组件,这个原则极大的减少了维护成本。

Kettle的优点[10]是以开发和应用领域里流行的Java平台为基础开发出来的,具有较好的移植性。可以在多种操作系统上运行。易用性好,封装程度较高。缺点是维护和调试较为困难,集群不够灵活和并发的利用不够充分。而且稳定性有缺陷,对于企业大规模生产环境不太适合。

2.2.2PentahoKettle开发流程设计

KettleETL数据整合主要由转换(Transformation)和作业(Job)两大部分完成[11]KettleETL过程在图形界面上看是一个有向无环图(如图2.5),节点代表作业或转换步骤(Step),边则是节点连接(Hop)

转换(是由多个步骤(Step)所组成的工作流,每一个步骤是一个特定的转换操作。节点连接(Hop)负责步骤与步骤之间的信息关联。转换是数据逻辑结构和数据值的调整。转换是ETL过程体现业务逻辑的部分,是数据仓库对数据要约的体现。

转换之间或者转换的步骤之间的信息通讯叫做跳(Hop),跳是一个数据单向流动的过程。与大多数ETL工具一样,数据流动的单位是行。

如上文所述,作业项的连接就构成了工作流。连接方式有:无条件连接,成功则连接,失败则连接。此外还有若干个辅助结点单元:

  1. Start单元,这是设计所有任务的起点组件,是执行的入口。

  2. OK单元:这是条件判断单元,前置流程成功则进行后面流程,可用脚本进行编制。 

  3. ERROR单元:这是条件判断单元,前置流程失败则进行后面流程。

  4. DUMMY单元:用于某组件结点出现多个执行结果的单元。

流行ETL数据传输解决方案_第5张图片

流行ETL数据传输解决方案.6一个典型的Kettle作业项设计

作业由若干个作业项构成(如图2.6),这些作业项之间的逻辑顺序由跳(hop)的连接来决定。所有作业项构成了整个作业的ETL操作。

另外,你的数据库连接也必须提前定义好。


流行ETL数据传输解决方案_第6张图片

流行ETL数据传输解决方案.7作业与作业项

2.2.3PentahoKettle的组件、调度与并行策略

KettleETL设计组件由SpoonPanChefKitchen[12]这四个产品组成。他们涵盖ETL的整个生命周期:

  1. Spoon ETL作业设计器,使用图形界面。

  2. Pan 是控制台命令。因此可以用脚本运行多个ETL作业。

  3. Chef 用来创建任务(Job)。与Spoon不同的是这里是任务层次的设计,一般都要内嵌Spoon设计的作业项。任务通过多个转换,转换的脚本等等,自动化更新目标数据仓库。任务运行结束时,还会有数据质量检查。

  4. Kitchen 运行Chef设计的任务,按照你一定的顺序。Kitchen也是一个后台运行的程序。可以指定执行人,日志文件,存储目录等。

Chef也是一个图形用户界面,主要是通过拖拽各种转换组件来完成任务设计。多个作业项按照逻辑顺序组成一道作业。比如用数据的数据生成日志文件,那么作业项将是:并行加载、筛选字段、转换和输出到日志文件。Chef中的主要作业项有:转换,这里是Spoon设计的一个任务,包含若干个转换;SQLSql语句执行,来从数据库获取数据;邮件,发送邮件;执行Shell脚本、Dos命令或者批处理;Job包,作为嵌套作业使用;JavaScript执行,就是执行JavaScript代码;SFTP,安全的Ftp协议传输;HTTP方式的上/下传。

另外,LogView组件可查看执行日志。下面简单列举一下典型的转换过程(在SPOON中):

  1. 输入。TextfileXMLand Excel input:输入为文本文件、XML文件和Excel格式的文件;TableInput:输入为数据库的表,实际执行的是Sql语句;GenerateRows:有些字段需要额外生成,比如自增的主键;

  2. 输出。TextFileXMLand Excel Output:各种文件类型输出;TableOutput:输出到目的表;Insert/Update:这里数据输出的方式是插入和更新,需要先用主键匹配输出中的同一行;

  3. 转换。SelectValues字段的类型、名称或者值的修改,映射成为新的数据列;FilterRows:按照各种条件过滤数据行,相当于Sql里的Where子句,但功能有所加强;SortRows:按某个字段对数据行进行排序;JoinRows:多个输入流的数据当做多张表进行Join操作;Aggregate:聚合,分组处理;Groupby:用某个字段进行分组,可以使用聚合函数;Calculator:自定义的聚合函数和工具函数;MergeRows:相似的数据进行合并,可以选择合并规则(如选择更新的数据);AddConstants:增加常量值。

在实际生产环境中还需要监控调度过程和运行结果,Kettle也有两种调度方式:

  1. 操作系统级调度:现代操作系统都有调度功能。类UNIX系统的Cron命令和Windows系统的计划任务。操作系统的调度都是用命令行的方式运行Kettle作业。所以这里用KitchenPan命令。

  2. 内置在PentahoBI Server里的Quartz调度:KettlePentahoBI组件的一员,很多Kettle用户也使用用户的PentahoBIServer。内置在PentahoBI Server里的调度程序可以执行一个包含有Kettle作业的ActionSequenceActionSequencePentahoBI Server的工作流)。

Kettle作业只要有两种主要的监控方式,日志和邮件。在生产环境中,KitchenPan命令可以通过Logfile参数来指定一个日志文件。此外,Kettle还有很多日志级别,主要的包括错误日志,基本日志和行级日志三个级别。而邮件通知是通过作业里的发送邮件作业项来完成的,把这个作业项集成到你的作业里的错误分支中。

Kettle中的每个步骤都是一个线程。多线程的可以利用数据行分发、并行执行和再合并的方式来利用。也可以单纯的每一个步骤设计多线程执行方式。当然你也可以对表分区,每个分区并行执行。

Kettle的集群方式和多线程运行模式有些类似。使用上首先要定义一些Carte子服务器,Carte子服务器是一个轻量级的服务进程,用来远程执行转换和作业。然后在Spoon中新建集群模式,加入所有机器。然后你就可以让一个作业以集群的方式运行,每个选定的子服务器上都有一个并行运行的进程。与Kettle并发方式相比,只不过是把调度单位从线程换成了进程

Kettle的集群方式运行时对任务的生硬分拆,看似解决了负载均衡问题,实际上加入了合并等重量级的远程交互过程,会造成大量集群内部的io从而让网络成为集群运行的瓶颈。在较大规模的ETL过程中并不适合。

2.3Talend解决方案

2.3.1Talend简介

Talend是一家针对的数据集成工具市场的ETL开源软件供应商。Talend把自己的技术和商业模式结合起来,提供开源的、创新的、强大而又灵活的解决方案。TalendETL开源软件同时满足了大中小企业的数据集成与应用集成需求,这与前面的两款工具。

TalendETL解决方案可以实现的功能包括数据集成,ETL,数据质量,主数据管理(MDM),应用集成等。而且性能稳定,使用便利,易于扩展。因而具有在全球有较大的市场份额。

2.3.2Talend开发流程设计

TalendETL开发流程中。核心概念是项目库(Repository)、任务(Job)、组件(Component)和连接(Row)

项目库包括业务模型(BusinessModels[13],作业设计(JobDesigns),元数据(Metadata),上下文(Context),代码(Code)和文档资料(Documentation)。JobDesign是作业设计器。Metadata是数据源(包括数据库连接、文件等)元数据管理。Context是全局变量,用在转换组件中。Code是作业生成的代码。Documentation是文档资料。

任务是TalendETL平台调度运行的基本单位。任务由组件和连接构成。组件类型有很多种[14],主要有:

  1. 云组件:这里的云是指亚马逊的云服务。

  2. 用户代码:用户自定义的ETL代码。

  3. 数据质量组件:检查输出数据质量。主要通过模板比较,格式检查和自定义代码检查等方式来控制。

  4. 数据库组件:主要负责数据库的连接。可以自定义读取或写入的sql和存储过程。

  5. Net组件:这个组件主要是用来获取http资源文件。

  6. 文件组件:适用于输入或者输出是文件的场景。

  7. 过程组件:这类组件承担了大部分的数据转换工作。包括过滤、映射、替换等。

  8. 系统组件:这类组件主要是负责和操作系统互动。比如SSH连接、CMD连接等。

  9. XML组件:负责XML文件的解析等职责。

Talend的作业设计都是利用TisStudio(新版本叫TalendOpenStudio)来完成的(如图2.7。在导入之前我们要在项目库RepositoryContext目录下设计上下文变量。然后在Metadata目录下指定文件或数据库表的元数据,并把这些元数据拖到JobDesigner工作区生成输入输出组件。接着就是拖动右边Palette的组件来完成数据的清洗和转换工作。

流行ETL数据传输解决方案_第7张图片

流行ETL数据传输解决方案.8TalendOpen Studio和作业设计

2.3.3Talend架构、调度和集群

流行ETL数据传输解决方案_第8张图片

流行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结构。MasterTAC(TalendAdministration Center)。而SlaveJobServer若干台。每一台JobServer都提供JobService远程服务,来运行执行的Job。同时JobServer有心跳机制会远程汇报自己的负载。TalendClientTisStudio)会把Job转换成代码和脚本,然后TAC根据JobServer的负载选择一台执行机,把Job资源发布到其上,调用远程服务运行它。同时Talend还可以为TAC搭建用来FailOverTomcat集群,有效保证了稳定性。

2.4几种ETL工具的比较

这几种ETL工具各有优劣(如表2.1):DataStage功能强大,但比较重量级,开发和维护成本高。Kettle比较轻量级和用户比较友好,但稳定性较差,并发性能一般。Talend介于两者之间,使用较为方便,稳定性好,传输性能差于两者。

表流行ETL数据传输解决方案.1几种ETL工具的比较

指标

Talend

DataStage

Kettle

增量传输支持

CDC,事件机制

CDC

CDC

异常处理

邮件通知,日志捕获

邮件通知,日志捕获

邮件通知,日志捕获

是否开源

并行性能

较好

一般

一般

监控日志

一般

较好

一般

开发难度

较低

一般

较低

开发成本

传输性能

一般

较好

稳定性

较好

较好

一般

易用性

一般

较好


2.5本章小结

本章主要是分析了国内当前流行的ETL解决方案。考虑到相关方案的流行性和代表性。我们选取了比较重量级的IBMDataStage产品、在中小企业比较流行的较轻量级的PentahoKettle产品以及介于两者之间的Talend解决方案作为典型介绍。


你可能感兴趣的:(ETL)