并行ETL工具可扩展技术的研究与开发

上传人:be****l 文档编号:82695822 上传时间:2022-04-29 格式:DOC 页数:58 大小:3.32MB
收藏 版权申诉 举报 下载
并行ETL工具可扩展技术的研究与开发_第1页
第1页 / 共58页
并行ETL工具可扩展技术的研究与开发_第2页
第2页 / 共58页
并行ETL工具可扩展技术的研究与开发_第3页
第3页 / 共58页
资源描述:

《并行ETL工具可扩展技术的研究与开发》由会员分享,可在线阅读,更多相关《并行ETL工具可扩展技术的研究与开发(58页珍藏版)》请在装配图网上搜索。

1、 . 并行ETL工具可扩展技术的研究和开发摘 要ETL工具负责从分布的、异构数据源中抽取数据并对其进行清洗和转换,最后装载到数据集市或数据仓库中,是数据挖掘和联机分析处理的基础。ETL工具通常提供了一些常用的基本操作,但是由于ETL应用场景多样、操作逻辑复杂,这些通用操作往往并不能满足用户的需求,这就要求ETL工具必须具有一定的可扩展性,以满足各种特殊需求。同时,在大数据时代,ETL工具通过整合云计算技术以处理海量数据。传统ETL工具通过集成并行ETL工具Hive和Pig的方式来弥补大数据处理方面的不足,但是存在商用工具价格高昂而开源工具集成度不够的问题,因此,较好地集成Hive和Pig以实现

2、功能的扩展非常重要。另一方面,ETL流程作为一个逻辑计划,在解析成物理计划的过程中需要根据优化规则进行一系列的优化,而优化规则并不是一成不变的,在ETL工具的使用过程中,新的优化规则会被总结出来,因此,还需要使优化规则具有较高的可扩展性。本文开发基于Hadoop的、B/S模式的并行ETL工具,并研究如何实现对并行ETL工具进行扩展,完成了如下几项主要工作:通过分析MapReduce并行计算框架的实现细节,设计实现了两种方案来向现有工具中嵌入定制的MapReduce代码以完成功能扩展从而可以处理复杂的需求。通过分析总结Hive和Pig脚本语言的语法特点,结合实际应用需求,选取了一整套基本操作,并

3、针对性地将基本操作设计为功能组件,然后通过分析基本操作间的依赖关系设计和实现了流程解析模块,解析出来的脚本拥有和手工编写的脚本一样的逻辑。这种集成方式扩展了并行ETL的功能,同时保证了系统能够提供一个统一的图形用户界面。通过分析开源ETL工具Hive和Pig的优化规则实现机制,设计实现了自己的优化规则实现机制。实现上是通过将规则需要匹配的样式和对应的操作关联起来,将规则的匹配机制和计划的游走机制进行隔离和抽象。基于这种设计方式,可以很方便地扩展优化规则。关键字:ETL 可扩展 MapReduce Hive优化规则51 / 58RESEARCH AND IMPLEMENTATION OF PAR

4、ALLEL ETL TOOLS EXTENSIBLE TECHNOLOGYABSTRACTETL tools, which are the foundation of data mining and on-line analytical processing, are used to extract data from distributedheterogeneous data source and load the result into data mart or warehouse after cleaning and transformation. ETL tools usually p

5、rovide some basic operations, such as correlation, summary, and so on, but due to the diversity of ETL application scenario, the complexity of operation logic, these common operations often cannot satisfy the needs of users, which requires the ETL tools must have certain extensibility, to meet the s

6、pecial needs of various. At the same time, in the era of big data, ETL tools handle huge amounts of data by integrating cloud computing technology.Traditional ETL tools make up for the large data processing by integrating parallel ETL tools such as Hive and Pig, but the existence of the high price o

7、f commercial tools and the problem that the open source tools integration is not enough. Therefore, how to integrate Hive and Pig better in order to realize the expansion of the function is very important. ETL workflow, on the other hand, as a logical plan, needs to be optimized according to a serie

8、s ofoptimization rulesin the process of being parsed into a physical plan.As the optimization rules are not set in stone and new optimization ruleswould be concluded in the process of using ETL tool, we need to make the optimization rules have high scalability.In this paper, based on Hadoop and B/S

9、mode, we put forward a parallel ETL system and study how to extend the parallel ETL system. The main work in this paper includes:Through analyzingthe implementation details of the MapReduce parallel computing framework, design and realize two kinds of solutions to complete the function extension of

10、dealing with the complex requirements by embedding custom MapReduce code in the existing tool.Based on the analysis and summary the language grammar characteristics of Hive and Pig script, combined with the actual application requirements, select a set of basic operationsand design functional compon

11、ents according to them. Then through analyzing the dependency between these operations, design and implement the workflow parsing module, which parsesa workflow into a script with the same logic asthe manually written script. This integration wayextends the functionality of the parallel ETL tool and

12、 ensures that the system can provide a unified graphical user interfaceat the same time. Through analyzing how Hive and Pig implement their optimizationmechanism, design and implement our own mechanism.A rule is designed to be a set of matching pattern and the corresponding operation, the mechanism

13、of matching the rules and walking in the plan is isolated and abstracted.Based on this kind of design, optimization rules can be extended easily.KEYWORDS:ETL,extensibility,MapReduce,Hive,optimization rule目录第一章绪论11.1论文研究背景与意义11.2相关研究现状11.3研究容与成果31.4论文结构4第二章相关概念与技术介绍52.1ETL52.2Hadoop52.2.1HDFS62.2.2Ma

14、pReduce72.3并行ETL82.3.1Hive82.3.2Pig92.4优化规则92.5表达式引擎102.6元数据102.7小结10第三章并行ETL工具可扩展技术的研究123.1可扩展组件技术123.2集成技术143.2.1Hive的集成153.2.2Pig的集成153.3优化规则的可扩展技术163.3.1Hive常用优化规则173.3.2Hive优化规则实现过程183.3.3Pig常用优化规则183.3.4Pig优化规则实现过程193.4小结20第四章并行ETL工具可扩展技术的实现224.1系统架构设计224.2部署架构234.3自定义MapReduce组件的实现234.3.1自定义M

15、R Java代码组件234.3.2自定义MR Jar组件254.4并行ETL工具的集成264.4.1功能组件的实现264.4.2元数据处理的迁移和管理354.4.3工作流的解析364.5优化规则的实现414.5.1操作的实现414.5.2规则的实现41第五章实验与结果分析445.1自定义MapReduce组件445.1.1自定义MR Java组件445.1.2自定义MR Jar组件455.2集成并行ETL工具455.2.1Hive流程465.2.2Pig流程475.3优化规则的可扩展485.3.1实验环境485.3.2实验数据485.3.3实验过程与结果分析495.4小结50第六章总结与展望5

16、16.1总结516.2下一步工作51参考文献53致54攻读学位期间发表的学术论文55第一章 绪论1.1 论文研究背景与意义随着云计算技术的逐渐成熟,大数据正在引发越来越多的关注。大数据可以被直观的理解为规模巨大的异构数据,但是从更深一层来讲,大数据还包括从海量数据中获取价值的方法。该方法包括数据的收集、整理、分析、挖掘等多个方面,最终的目的是从中获得有价值信息并衍化出一种新的商业模式。大数据技术离不开数据的收集整理,ETL工具负责从分布的、异构数据源中抽取数据并对其进行清洗和转换,最后装载到数据集市或数据仓库中,是数据挖掘和联机分析处理的基础1。大数据时代的ETL和云计算技术紧密结合,工业界和

17、学术界在并行ETL技术的研究和开发方面都取得了丰硕的成果。一般的ETL工具都会提供丰富的抽取、转换和加载功能,以满足实际应用的需求,然而,由于应用场景的多样性和特定逻辑的复杂性,这些ETL工具提供的通用组件往往并不能满足用户的需求,这就要求ETL工具必须具有一定的可扩展性,以满足用户多样化、复杂化的需求。另外一方面,基于云计算技术的并行ETL产品Hive和Pig使得用户可以通过写脚本的方式进行ETL操作,不少传统ETL工具通过集成它们来提供对大数据处理方面的支持,但是支持的程度不一,商用的价格昂贵,开源的集成度不够。还有就是,查询计划的优化广泛的应用于ETL工具中,如何设计优化规则才能使得优化

18、规则具有良好的可扩展性值得深入研究。本文工作基于作者参与开发的一个并行数据挖掘平台项目,旨在提高并行ETL工具的可扩展性,使得并行ETL工具能够应用于更多的场景,能够以统一的拖拽组件构建ETL流程的方式集成开源并行ETL产品Hive和Pig,并设计实现了优化规则的表示和实现机制,使得实际应用中发现的优化规则或者从其他产品中借鉴的优化规则可以方便地添加到系统中以实现比较好的可扩展性。1.2 相关研究现状在用户从越来越多、越来越复杂的数据中获取有价值的信息的过程中,ETL扮演着非常重要的角色,ETL是后续数据挖掘的基石,一个好用且高效的ETL工具将帮助用户更好地完成ETL工作以与更方便地搭建自己的

19、数据处理平台。正因为ETL工具的重要性,市场对ETL工具拥有强烈的需求,ETL工具蕴含的商业价值不容小觑,一些企业开发出功能强大的商用ETL工具并获得广泛的使用,这些企业也从中收获颇丰。商用ETL工具尽管功能强大,但是其高昂的价格也使得一些中小企业和研究机构对其望而却步,一些开源的ETL工具满足了这些用户的需求。同时,数据的价值被越来越多的人认识到,大量的数据被生成以发掘其中的价值,大数据时代的到来对数据处理技术提出了新的需求,一些传统ETL工具要么必须通过大幅度提高软硬件成本以实现对大数据的处理,要么根本无法满足这些需求,并行ETL工具的出现使得对于大数据的处理成为现实。传统的ETL工具分商

20、用和开源两种,主流的商用ETL工具主要有如下三种:IBM公司的Datastage、Informatica公司的PowerCenter和NCR Teradata公司的ETL Automation。Datastage和PowerCenter都具有友好的图形用户界面,提供丰富的ETL操作组件。用户可以拖拽功能组件到相应的工作区域并进行参数配置,然后通过在组件之间连有向边来设置执行的先后关系以完成ETL流程的设计。Teradata的ETL Automation采用命令行的方式操作,只提供了两种简单的GUI:一种用来定义和管理在ETL Automation中的作业和作业关系;另一种用来完成对任务执行状态

21、的监控。主流的开源ETL主要有如下两种:Kettle和Talend,都提供GUI 5 6。传统ETL工具中,商用的都基于 C/S 模式,开源的本来是单机的,在向大数据处理方面做过相应扩展后也属于C/S模式。在工具本身的可扩展性方面,PowerCenter提供两种类型的可扩展组件:Java自编程组件支持用户定制的Java代码,用户自定义组件支持用户组合常用组件为新组件,可扩展组件可以作为工具的组成部分加入到工具中以供后续使用7。DataStage也提供了可定制的类Basic代码嵌入组件8。Kettle和Talend也都提供可扩展组件以方便用户运行脚本,其中Talend还支持用户自己输入Java代

22、码。Hadoop是Apache基金会下的一个开源项目,是一个能够对大量数据进行分布式处理的软件框架,实现了包括HDFS分布式文件系统和MapReduce分布式计算框架在的云计算平台的基础框架2。开发人员基于Hadoop开发了不少针对大数据的并行ETL工具并且这些工具均具有一定程度的可扩展性。Hive是基于Hadoop的大规模数据处理工具,它提供类SQL的脚本语言HQL,该工具提供了常用的关系操作、表达式操作和置函数,并支持用户以UDF和嵌入自定义脚本的形式对工具进行扩展3 。Pig同样是一个基于Hadoop的大规模数据处理工具,它提供流程式语言Pig Latin,支持用户以编写脚本的形式完成E

23、TL操作。和Hive一样,该工具提供了常用的关系操作、表达式操作和置函数,同时,支持用户以UDF和嵌入自定义脚本的形式对工具进行扩展,以完成特定的ETL操作4。云计算时代,传统的商用ETL工具和开源ETL工具均开始集成开源并行ETL工具以完成功能上的扩展,但是集成方式各异,集成的深度也有所不同。PowerCenter提供了两套执行引擎,传统的和并行的(Hive);另外添加了中间的解析模块,将传统的工作流解析为可被Hive执行的形式,而用户不需要关心具体使用哪个执行引擎7。这种方式在集成Hive的同时还保留了图形用户界面的便捷性。Kettle通过三种方式完成在大数据处理方面的扩展:一种是运行Ma

24、pReduce代码的Jar包;另一种是支持在组件中写HQL脚本进而从Hive中查询数据5;还有一种是将原来本地的操作转换为Map或者Reduce中的操作,功能有限并且还在不断的完善中。Talend提供组件运行HQL脚本和Pig Latin脚本,同时针对Pig开发了一套组件,支持拖拽工作流以定义ETL处理逻辑6。商用ETL工具利用基于代价的优化器优化查询计划,但是在最初也都是使用基于规则的优化器。在进行大数据的并行处理过程中,基于规则的优化器被用来优化执行计划9。Hive和Pig也都设计了自己的优化规则并设计了特定的实现机制以保证规则的可扩展1011。通过上面的分析不难看出,图形用户界面仍旧是E

25、TL工具的首选,并且都趋向于集成开源并行ETL工具,市场上缺少基于B/S模式的并行ETL工具,另外,ETL工具通过提供一些可定制组件来实现功能扩展。对Hive和Pig的集成成为一种快速扩展ETL工具并行处理能力的手段,商用ETL工具的佼佼者PowerCenter集成得最好,开源ETL工具在做这方面的尝试但是成果有限。基于优化规则来进行并行ETL流程的优化仍旧占据主导地位,优化规则实现机制具有好的扩展性非常必要。1.3 研究容与成果传统ETL工具基本都是基于C/S模式,用户往往需要安装庞大的软件客户端和做复杂配置,而B/S模式则将核心功能放在服务器端,用户只需要通过非常常见的Web浏览器即可实现

26、对系统功能的使用。基于上述考虑和作者参与的项目的实际需求,本文设计实现的并行ETL工具采用了B/S的软件架构,相关的研究和开发工作也均是基于此种模式。MapReduce计算框架使开发人员可以方便地实现并行计算,本文希望提供一种自定义MapReduce代码的嵌入方案,以便开发人员方便地扩展ETL功能以应对比较特殊的应用场景或者方便地利用已有成果。同时,Hive和Pig均是基于Hadoop的脚本ETL工具,但是均没有提供图形用户界面的使用方式,而传统ETL工具基本上都提供友好的图形界面,商用ETL的领军产品PowerCenter在这方面的成就尤为突出。本文希望在可用性方面扩展现有ETL工具,使之能

27、够以图形化的方式比较好地集成开源并行ETL脚本工具Hive和Pig。另一方面,Hive和Pig的实现机制均是将脚本解析为MapReduce执行计划,在解析的过程中涉与到一套优化规则以便使最后的MapReduce执行计划性能上更优。在实际的应用中,一些新的规则会被归纳总结出来,这就需要ETL工具能够比较方便地对优化规则进行扩展。本论文希望开发出一种规则定义和实现机制,使得开发人员可以方便地对规则进行扩展。本论文基于MapReduce计算框架特点、Hive和Pig脚本语言语法特点与优化规则实现机制,结合工作中遇到的ETL实际应用需求,针对现有ETL工具可扩展性差、对开源ETL工具集成度不够、优化规

28、则扩展困难这三个方面的问题进行了细致研究,提出了相应的扩展方案,并对相应的技术进行了编码实现。本论文的主要成果包括:1) 实现一种自定义MapReduce代码嵌入机制,包括两个可定制组件,可以让用户实现将自己定义的MapReduce操作应用于并行ETL工具中;2) 提供一整套Hive、Pig组件,支持用户在图形用户界面中以构建工作流的方式设计基于Hive或Pig的ETL工作流而不仅仅是局限于使用脚本,即对Hive和Pig进行更深入的整合,对并行ETL工具进行功能扩展;3) 设计实现了一套规则表示和扩展机制,方便用户在使用过程中将提炼的规则集成到现有系统中。1.4 论文结构本论文的组织结构如下:

29、第一章是绪论:首先说明了课题的研究背景和意义,接着对相关技术的现状进行了分析,最后介绍了作者的主要工作和论文结构。第二章是相关概念与技术介绍:主要介绍ETL的相关概念和为了实现可扩展将要应用的一些技术,包括:Hadoop、MapReduce、Hive、Pig、优化规则等。第三章是并行ETL工具可扩展技术的研究:主要包括自定义MapReduce代码嵌入、Hive和Pig的集成以与优化规则可扩展三个方面。第四章是并行ETL工具可扩展技术的研究:主要针对三种扩展方式进行编码实现,介绍了系统架构以与实现的细节。第五章是实验与结果分析:主要是将软件系统部署在Hadoop集群之上,设计一些测试用例就上述三

30、个方面的扩展技术的实现情况进行验证并对结果进行分析。第六章是总结与展望:主要是总结论文所取得的成果,并就下一步的工作进行展望。第二章 相关概念与技术介绍2.1 ETLETL是数据抽取(Extract)、转换(Transform)、装载(Load)的过程,是构建数据仓库的重要一环,用户从数据源抽取出所需的数据,经过数据的清洗和转换,最终按照预先定义好的数据仓库模型,将数据加载到数据仓库中去12。具体而言:抽取主要是针对不同的数据源,充分理解数据的定义,设计不同的数据抽取方式,进行必要的数据类型转换,选择合适的数据传输机制,如数据库直连、通过FTP接口机等。清洗可以在抽取的过程中进行,也可以作为转

31、换的组成部分,主要是将有问题的纪录剔除出来。可能的问题包括:数据类型不匹配、字段缺失、二义性、违反业务规则等。转换主要是对抽取出来的数据进行一系列的转换操作,使之成为满足目标数据集中模型需求的形式。转换在ETL处理过程中占比最大,因此,ETL工具均会提供丰富的转换功能,如记录筛选、字段选择、数据汇总、数据关联等。装载是将转换的结果装载到目标数据集中,可以将其看成抽取的逆操作,涉与的方面也与抽取类似。数据的抽取和装载主要涉与多样的数据存储方式和传输方式,数据可能被存储在关系型数据库、非关系型数据库或者文件中,而传输方式则包括串行和并行,并且涉与到同步和异步的问题。从ETL的实现方式上来看,还可以

32、分为ETL和ELT。ETL的方式即先从不同的数据源中抽取数据,放到ETL工具中来,ETL工具完成相应的转化后将处理的结果载入到目标数据集中(通常为数据仓库)。而随着数据仓库功能的日益强大,ETL逐渐演化出一种ELT的实现方式,抽取的数据不再通过中间的处理而是直接载入到数据仓库中,对数据的转化在数据仓库中完成,其处理结果也就直接保存在了数据仓库中。2.2 Hadoop2003年,谷歌公布了GFS和MapReduce两种高性能、高可扩展的分布式海量数据处理框架,并验证了该处理框架在海量网页数据处理方面的优越性。上述框架实现了分布式计算和分布式存储更高层次的抽象,使用户不用关注复杂的部并行工作机制、

33、不用具备丰富的分布式系统知识与开发经验,即可实现大规模分布式系统的部署,以与海量数据的并行处理13。Apache Hadoop开源项目就是克隆了这一框架,主要由Hadoop Distributed File System(HDFS)和MapReduce两部分组成:HDFS是Google File System(GFS)的开源实现;MapReduce是Google MapReduce的开源实现。作为一个能够并行处理海量数据的软件框架,Hadoop主要有以下几个优点:1) 高可靠性:Hadoop假设计算和存储均可能失败,因此维护多个数据副本,并保证在有任务失败的情况下自动进行任务的重新分配;2)

34、高扩展性:Hadoop集群的各个节点相互独立,新添加的节点可以很方便地进行存储的负载均衡,任务也会被自动分发给新添加的节点,集群规模可以方便地进行扩展;3) 高效性:Hadoop以并行方式工作,通过在节点之间动态地移动数据来保证各个节点的负载均衡,从而加快了整个作业的处理速度;4) 低成本:Hadoop是开源的并且基于社区服务器即可搭建高性能的Hadoop集群,因此它的软硬件成本都比较低,任何个人和机构都可以使用。因为上述的优点,Hadoop自出现之初就获得了普遍的关注和认可,随着Hadoop版本的越来越稳定,越来越多的应用被移植到Hadoop上面来,Hadoop生态圈获得了良性的发展。2.2

35、.1 HDFSHDFS是一种分布式文件系统。一个Hadoop集群主要包括一个用于管理这个文件系统的目录节点和多个用于存储实际数据的数据节点。目录节点与数据节点是不同的逻辑概念,在实际的物理集群上,它们可以是同一物理节点。图2-1 HDFS架构图HDFS采用主从(master/slave)结构,一个集群有唯一的master和若干个slave,前者即为目录节点(NameNode),后者即为数据节点(DataNode)。通过NameNode,HDFS对外提供一个统一的访问接口,在用户看来,文件是一个统一的整体,可以以文件为单位进行相应的操作;而实际的文件则是被分割成若干数据块,分布于同一集群中不同的

36、DataNode上。NameNode作为数据访问的入口,负责集群上数据的管理维护工作。它保存了文件的元数据信息,包括文件名、文件备份信息、文件与实际存储的数据块的对应关系等。DataNode通过发送心跳信息给NameNode以使其知道它是否存活,通过发送数据目录给NameNode以使其知道它所包含的数据块编号。HDFS采用分层的文件体系,提供绝大多数其他文件系统也有的功能,包括创建、删除、重命名目录以与文件容查看等。同时,HDFS还提供一些与本地文件系统进行交互的功能,如从本地加载数据到HDFS和从HDFS获取数据到本地等。在HDFS中,一个文件在被分成若干个数据块并存储到不同数据节点的同时,

37、每个数据块又有若干冗余,这些冗余同样被存储在不同的数据节点上以保证单节点磁盘故障等问题不会影响整个集群上数据的安全。2.2.2 MapReduceMapReduce是一个简单高效的并行计算模型,可用于处理结构化和非结构化的数据13。通过MapReduce,开发人员可以很轻易地实现并行计算从而可以处理海量数据。1. MapReduce执行框架图2-2MapReduce执行框架如图2-2所示, MapReduce执行流程如下:一个大的输入文件被分成多个分片,每个分片对应一个map task,map task中的map方法包含map端的主要处理逻辑。map函数的输出为键值对的形式,这些输出会被排序,

38、具有一样key的value会被放在一起。map端的输出被分发到reduce端,分发以key值为依据,保证具有一样key值的键值对被分发给同一个reduce task。map端的数据分发完成后,reduce端需要按key值进行一轮归并排序,以便将来自不同map端的具有一样key的value集中到一起。reduce方法包含reduce端的主要处理逻辑,每次处理一个key,Itorator形式的对象,其结果被输出到HDFS。2. MapReduce编程模型MapReduce将并行计算分成两个相互关联的阶段:map阶段和reduce阶段,分别对应一个Mapper类和Reducer类。开发人员通过实现自

39、己的Mapper类和Reducer类,并在驱动程序中进行相应的配置就可以驱动MapReduce作业执行,从而完成自己的并行处理逻辑。MapReduce对两个阶段的读写操作和一些中间操作进行了封装,输入数据分别以和的形式提供给用户使用,用户不用关心如何读写、如何分发、如何归并等细节,而只用关心实际处理逻辑,也就是关注Mapper类的map方法和Reducer类的reduce方法的实现。同时,MapReduce也提供了相应的接口给开发人员去自己实现读写、分发等功能以完成更复杂的操作。2.3 并行ETLHadoop集群部署方便快捷,开源并行计算框架MapReduce大大简化了并行计算程序的编写工作。

40、通过设计特定的Mapper和Reducer并编写相应的驱动程序驱动MapReduce任务执行,用户可以方便地实现并行处理逻辑进而在Hadoop集群上处理大数据。因此,为了实现海量数据的ETL处理逻辑,用户可以将整个逻辑分解成多个MapReduce任务并制定其执行的先后关系,然后编码实现并行ETL。这种方式因为对于处理逻辑和数据结构的了解,可以编写最有针对性的代码进而可以实现较优的性能,但是开发工作量大,调试过程复杂,对于多样的需求在工作量、准确性和灵活性方面均无法满足。Hive和Pig均是开源的并行ETL工具,它们提供脚本给用户来设计ETL处理流程,这些脚本被解析成MapReduce任务进而可

41、以在Hadoop集群上执行。也就是说,它们封装了一系列的MapReduce代码并以脚本的方式展现给用户,省掉了用户自己编写MapReduce代码的麻烦,进而使得用户可以更加方便地设计ETL方案。同样的逻辑,用户的代码(脚本)编写量大幅减小,同时,ETL方案可读性大幅增加。性能方面,Hive接近自己编写的代码,而Pig主要是比较好上手,性能上略差些。2.3.1 HiveHive是开发的构建于Hadoop集群之上的数据仓库应用,由贡献出来,成为Apache下面的开源项目。Hive可以将结构化的数据文件映射为一数据库表,并提供丰富的类似SQL的数据处理功能。Hive使用一种叫做HQL的脚本语句,用户

42、编写的HQL脚本语句被Hive解析为MapReduce作业并在Hadoop集群上运行。相对于自己编写MapReduce代码,其优点是学习成本低,代码量小,用户可以通过少数的HQL语句快速实现较为复杂的MapReduce数据处理逻辑。如果将最后的结果也以Hive数据表的形式存储在HDFS上面,那么这种ETL方式便是上文提到的ELT,即将数据抽取并载入到Hive中最后进行数据的转换。HQL属于声明式语言,其逻辑与工作流的相似性较小,这也使得以其为基础设计组件的难度相对要大一些。另外,Hive需要定义与数据相关的元数据并对这些元数据进行管理。2.3.2 PigPig是Yahoo!贡献的Apache开

43、源项目,是一个基于Hadoop的大规模数据分析平台。它提供一种名为Pig Latin的脚本语言,与Hive的实现机制类似,该语言的编译器会把用Pig Latin编写的数据分析请求转换为一系列经过优化处理的MapReduce运算。Pig Latin属于流程式语言,与工作流流式的特点很契合。Pig不需要保存数据的元数据,只需要在使用前为其指定元数据。对同样的数据,不同的应用中可以指定不同的元数据,显得比较灵活。2.4 优化规则在不进行优化的前提下,针对一样的ETL需求,使用一样的ETL工具,因为对工具熟悉程度的差异、对需求理解程度的差异等各方面的缘故,不同的用户会设计出不同的ETL方案,不同方案的

44、执行效率可能会有比较大的差异。为了尽量使执行效率最优,ETL工具通常设计一系列优化规则,以用于对用户设计的ETL方案进行优化。特定的优化规则往往还会以使用手册的形式告知用户,以便用户设计方案时作为参考。传统的ETL工具里面均封装了一些优化规则,因为数据结构、设计架构等方面的差异,不同ETL工具的优化规则不尽一样,对于一样的优化规则,其最后的实现机制也会不尽一样。在将处理逻辑迁移到并行框架里面来之后,因为处理方式的改变,优化规则也要做出相应的改变。以Hive为例,因为HQL是一种类SQL的脚本语言,所以针对SQL语句设计的一些优化规则(如谓词下推、分区信息利用等)可以移植到并行框架中来,同时需要

45、对其实现机制进行调整以适应新的框架(MapReduce并行计算框架),另外,一些新的优化规则被设计和实现(如列裁剪、MapJoin等)。2.5 表达式引擎大部分ETL操作涉与到表达式求值,如过滤操作(对应SQL中的WHERE)中的条件表达式,ETL工具一般集成表达式解析和求值的功能。为了简化工作,本论文采用开源的表达式引擎。在经过一番调研和测试,选择了功能和性能都满足要求的Fel。Fel支持解释执行和编译执行两种方式求值,用户只需要将表达式和表达式中的变量值传递给表达式引擎,就可以获得表达式的值以与表达式结果对应的数据类型。2.6 元数据元数据为描述数据的数据,主要是描述数据属性的信息,用来支

46、持如指示存储位置、历史数据、资源查找、文件纪录等功能。Hive处理的数据为表结构,需要进行元数据管理,其元数据存在关系型数据库Derby或者MySQL中,用户可以通过Hive提供的DDL来改变数据对应的元数据。Pig不需要保存元数据,只在使用时临时设置,对于不同的数据可以根据需求对应成不同的元数据。本论文涉与到对Hive和Pig的集成,加上工具本身的置数据结构,因此需要统一管理元数据。2.7 小结本章在介绍了ETL的相关概念,列举了几种传统的有代表性的ETL工具,包括商用的和开源的两个类别,通过分析这些ETL工具的共性可以看出:传统ETL工具不论是商用的还是开源的,均提供了友好的图形用户界面,

47、在这种图形用户界面中提供一整套ETL组件,各个组件对应不同的ETL处理逻辑,通过向流程构建界面中拖入特定的功能组件并根据处理逻辑的先后关系将它们用有向边连接起来构成ETL工作流,可以很方便用户设计自己的ETL方案。另外,这些商用ETL工具均采用了C/S架构,而开源ETL工具在提供大数据支持之后也属于一种C/S架构。这一点相对于B/S架构有如下缺点:用户需要安装特定的客户端并进行相应的配置才能使用,而有些配置会相对复杂。市场上还没有没有比较成熟的采用B/S架构的并行ETL工具。本章还介绍了分布式计算技术,而重点是现今被很多公司和研究机构应用于实际工作中的Hadoop以与基于Hadoop的一些开源

48、ETL工具。Hadoop在并行计算中的地位可谓非常重要,而本文也是基于Hadoop来实行对大数据进行并行ETL处理。因为可扩展的需求,本章还对会用到的表达式引擎和元数据管理技术进行的介绍,一个好的表达式引擎和元数据管理模块可以在功能上和性能上提升整个ETL工具的表现。第三章 并行ETL工具可扩展技术的研究尽管上面介绍的ETL工具均提供了丰富的ETL组件以提供丰富的ETL处理逻辑,但是因为数据格式的多样、ETL需求本身的复杂性等因素,导致在实际使用过程中,ETL工具提供的一整套ETL组件无法完成特定的ETL工作或者即使能够实现特定ETL需求但是设计出来的流程复杂并且性能低下,这时候就需要ETL工

49、具能够提供给用户对其进行扩展的功能,让用户自己实现一些处理逻辑并集成到现有ETL工具中。如第二章的描述,提供了UI界面的传统ETL工具不论是商用的还是开源的均采用C/S的架构,这种架构因为客户端的因素,在可扩展性方面有特定的优势,本文针对B/S模式下的并行ETL工具的可扩展技术,因而在设计和实现上要做出相应的取舍。本章重点进行并行ETL工具可扩展技术的研究,结合实际应用需求,提出可行的在并行ETL工具中可以应用的可扩展技术并总结为如下三个主要方面:可扩展组件技术、开源ETL工具集成技术和优化规则可扩展技术。13.1 可扩展组件技术商用ETL工具本身提供的组件极为丰富,尽管如此,它们也还是在可定

50、制方面提供了相应的支持。PowerCenter提供两种类型的可扩展组件,可扩展组件可以作为工具的组成部分加入到工具中以供后续使用:Java自编程组件支持用户定制的Java代码;用户自定义组件支持用户组合常用组件为新组件,该组件从本质上是对某种子流程进行了封装和抽象,使之从表现上看成为了一个单独定制的组件,也就是说,这种定制开发机制是针对多个应用场景中重复出现的子流程,其主要目的在于减少重复性工作。Datastage嵌了一种类BASIC语言,可以写一段处理程序来增加灵活性以满足特殊需求,然而这也要求用户对于这种特有的语言进行额外的学习。开源的Kettle和Talend也都提供了一些可扩展组件以支

51、持一些可定制的ETL逻辑的实现。Kettle可以写自定义的SQL查询、JavaScript和正则表达式。Talend支持写自定义的SQL查询和Java代码。Hive和Pig自诞生之初就考虑了可扩展性,也都从两个层面来支持定制:一个是UDF层面,即单从函数功能这一方面来对工具进行扩展;另一个是脚本支持方面,即支持嵌入其他脚本语言定义的处理逻辑。由此可以看出,以提供可扩展组件的方式来实现扩展ETL工具功能的方式较为普遍。本论文研究如何为基于B/S架构的并行ETL工具添加一个可定制的组件,该组件可以接受自定义的MapReduce代码,因此在使用中如果出现新的需求,可以不用重新编译、打包和部署工程。M

52、apReduce作业可以只有Map阶段,还可以由Map阶段和Reduce阶段构成,也可以由Map阶段、Combine阶段和Reduce阶段构成。要完成一个MapReduce作业,除了有完成相应阶段的类以外,还需要有一个驱动程序,该驱动程序对该作业进行一些必要的参数配置,如输入输出路径、Map阶段或者Reduce阶段要用到的参数等。驱动程序还要负责指定各阶段对应的具体的Mapper类、Combiner类和Reducer类,并完成整个作业的提交和后续处理工作。图3-1 MapReduce作业执行流程如图3-1所示,在提交MapReduce作业之前,执行作业所需的各种资源均被复制到Hadoop分布式

53、文件系统中,主要包括如下三类:1) 配置信息(job.xml):与作业相关的各种配置参数,包括Hadoop本身的一些参数和用户在驱动程序中自己定义的参数,这些参数往往是组件本身所需要的参数,以Select组件来说,其所需参数至少要包括所选择的字段名称。2) 分片信息(job.split):即输入数据的分片信息,通过这些信息,可以了解输入数据在集群上的分布情况,进而选择在合适的节点运行TaskTracker以与在需要的时候可以获悉需要的数据应该从哪个远端节点拷贝到本地节点上来。3) 执行文件(job.jar):与作业具体执行逻辑相关的文件,如Mapper类、Combiner类和Reducer类对

54、应的.class文件等。拷贝到HDFS上的这些资源文件又会被分配了任务的从节点拷贝到本地,进而构造启动JVM的参数,然后启动一个新的JVM来运行任务。实际使用中,可以通过两种方式指定jar文件,一种是在驱动程序中使用JobConf类的setJar()方法来指定,另一种是通过Hadoop的jar命令来指定jar文件。setJar()的基本使用方式为:JobConf conf = new JobConf(MyDriver.class); /job配置信息conf.setJobName(JobName); /设置job名称conf.setMapperClass(MyMapper.class); /设

55、置job的Mapperconf.setReducerClass (MyMapper.class); /设置job的Reducerconf.setJar(myJarPath); /设置job的jar包对应的本地路径JobClient.runJob(conf); /job配置信息setJar()方法接受一个String类型的参数,表示jar包对应的本地路径。第二种方式的实现机制是将包含驱动程序、MapReduce程序的Java工程打包成jar文件并放到集群中的某个节点上特定目录下,然后执行Hadoop的jar命令来运行作业。可以使用下面的命令执行包含Hadoop作业Jar文件:hadoop jar

56、 myJob.jar arg0 arg1 .这条命令实际执行的是:java org.apache.hadoop.util.RunJar myJob.jar arg0 arg1 .RunJar读取myJob.jar文件,尝试从manifest中提取Main-Class,如果提取不到,则把jar文件名之后的第一个参数指定的类作为Main-Class。RunJar会通过URLClassLoader加载jar文件中的资源,并使用Java反射机制调用Main-Class的main方法,调用时将hadoop jar命令中其他的参数作为main方法的实参。基于上面的分析,主要通过上述两种方法来实现可扩展组件

57、。因为B/S架构下无法对Java代码进行在线编译,因此需要将Java代码传到服务器端来完成编译工作,相应的编译信息也需要在前台展示给用户。同时,多个自定义MapReduce代码需要有个比较好的管理机制,以便用户在需要的时候可以方便地查找和使用。3.2 集成技术如第二章所言,传统ETL工具基本都提供了友好的图形用户界面。为了添加处理大数据的能力,传统ETL工具基本选择了集成已有并行ETL工具的方式,这样比较快捷,传统ETL工具主要关注如何集成,而不必再进行并行ETL模块的开发。同时,现有并行ETL工具均以脚本方式运行,不方便用户构建和管理ETL流程,构建ETL流程的过程也不直观,并且,这些并行E

58、TL工具均无法提供作业的定时调度功能,无法真正作为一个完整的ETL工具使用。可以说,集成已有并行ETL工具,同时提供一个友好的图形用户界面,是扩展ETL工具的一个主要方式。3.2.1 Hive的集成如前所述,Informatica PowerCenter在保证原有ETL流程构建逻辑不变的情况下提供对Hive的集成,一个流程解析模块负责将用户构建的ETL流程解析成HQL脚本并提交给Hive执行。图3-2 Kettle SQL组件Kettle并没有专门针对Hive集成做特别多的额外的工作,而是将与Hive相关的配置添加到两个已有的组件中以完成扩展:一个组件叫做“DB连接”,添加了连接Hive的配置

59、选项;一个组件叫做“SQL”,这个组件并没有做改动,只是需要选择对应的Hive数据库连接。其实现机制是通过Hive提供的JDBC数据库接口来操作Hive数据表。Talend集成Hive的方式类似于Kettle,也是通过提供写HQL脚本的接口给用户的方式来实现通过Hive处理大数据。3.2.2 Pig的集成Pig流程式的脚本语言使得用Pig来定义ETL流程极为方便,而no schema的方式也给用户提供了很大的灵活性,正是因为拥有这些优点,尽管Pig在性能上较同类型的Hive存在比较明显的劣势,仍旧有很多用户选择使用Pig来完成他们的ETL操作。出于性能的考虑,商用ETL工具都没有选择Pig作为

60、其底层执行引擎,而开源的Kettle和Talend均选择了对Pig进行集成。Kettle提供一个名为“Pig Script Executor”的组件以实现在Hadoop集群上执行指定的Pig Latin脚本文件。图3-3 Pig script executor配置界面在执行的过程中,Pig Script Executor组件会通过Pig的日志管理模块读出Pig的日志并将其显示给用户,与Hadoop相关的日志信息也会一起显示,如此实现对任务执行状态的监控。相对于Kettle,Talend对Pig进行了比较深入的整合,它基于Pig设计开发了一套组件,不同的组件对应于Pig中不同的语句,这些组件构建

61、的ETL流程被Talend自动解析为Pig Latin脚本并通过Pig来执行。与Hive不同的是,Pig并不是数据库工具,因此无法通过JDBC这样的方式来访问Pig,而只能通过Pig提供的JAVA API以嵌入的方式来执行Pig Latin脚本。3.3 优化规则的可扩展技术本小节主要分析Hive、Pig的优化规则与其实现机制,研究如何设计优化规则以实现优化规则的可扩展,以便在实际应用中发现的新的规则可以被方便地添加到已有系统中。从实现机制来开,Hive和Pig拥有相似的处理流程,均是通过ANTLR来将脚本解析为抽象语法树(AST),然后从抽象语法树生成逻辑执行计划,逻辑计划即为各种操作构成的有

62、向无环图。应用工具中置的优化规则,生成的逻辑计划会被优化。经过优化的逻辑计划又被转换成物理执行计划,物理执行计划再经过一次优化后,特定的拆分规则被应用,物理计划被划分成一个一个的阶段,分别对应MapReduce的Map和Reduce阶段。相邻的Map任务和Reduce任务构成一个MapReduce作业。经过这样的划分和构建,生成了一个由MapReduce作业构成的有向无环图,即最后的MR执行计划。依照MR执行计划中的依赖关系,MapReduce作业被按序提交到Hadoop集群并执行。图3-4 脚本执行流程图3.3.1 Hive常用优化规则下表列出了常用的Hive优化规则和对应的参数以与优化规则

63、转换类。表3-1 Hive常用逻辑优化规则参数优化规则转换类优化规则hive.optimize.cpColumnPruner列裁剪hive.optimize.ppdPredicatePushDown谓词下推PartitionPruner尽早执行只取特定分区的操作PartitionConditionRemover移除不必要的分区条件hive.optimize.index.groupbyRewriteGBUsingIndex基于索引的Group By,如果处理的字段有索引,利用这些索引信息hive.optimize.groupbyGroupByOptimizer基于分桶的Group By优化当SE

64、LECT子句中标明/*+ MAPJOIN() */时使用MapJoinProcessor人为指定使用MapJoin,Hive也可以通过自动检测来判断是否需要用Map端Joinhive.optimize.bucketmapjoinBucketMapJoinOptimizer分桶Map端Join(数据分了桶时使用)hive.optimize.bucketmapjoin.sortedmergeSortedMergeBucketMapJoinOptimizer分桶Map端Sorted MergeJoin(数据本身有序)默认使用UnionProcessor看UNION ALL操作的子查询是否都在map端完成,并记录相应的情况3.3.2 Hive优化规则实现过程优化规则转换类均实现Transform接口,该接口只有一个transform方法,转换类实现具体的转换逻辑。Hive将Transform分类,每一类包括一个Transform集。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!