CN112667719A - 一种hadoop集群运行ETL的流程分解方法与装置 - Google Patents
一种hadoop集群运行ETL的流程分解方法与装置 Download PDFInfo
- Publication number
- CN112667719A CN112667719A CN202011571984.0A CN202011571984A CN112667719A CN 112667719 A CN112667719 A CN 112667719A CN 202011571984 A CN202011571984 A CN 202011571984A CN 112667719 A CN112667719 A CN 112667719A
- Authority
- CN
- China
- Prior art keywords
- node
- reduce
- flow
- etl
- source
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 94
- 238000000354 decomposition reaction Methods 0.000 title claims abstract description 32
- 239000003638 chemical reducing agent Substances 0.000 claims abstract description 40
- 230000009467 reduction Effects 0.000 claims abstract description 27
- 230000008569 process Effects 0.000 claims description 43
- 238000011144 upstream manufacturing Methods 0.000 claims description 18
- 230000015654 memory Effects 0.000 claims description 17
- 238000003860 storage Methods 0.000 claims description 10
- 230000000694 effects Effects 0.000 description 14
- 238000012545 processing Methods 0.000 description 14
- 238000010586 diagram Methods 0.000 description 11
- 238000010276 construction Methods 0.000 description 8
- 238000012163 sequencing technique Methods 0.000 description 6
- 239000012634 fragment Substances 0.000 description 5
- 235000010627 Phaseolus vulgaris Nutrition 0.000 description 4
- 244000046052 Phaseolus vulgaris Species 0.000 description 4
- 238000013467 fragmentation Methods 0.000 description 4
- 238000006062 fragmentation reaction Methods 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 3
- 230000002776 aggregation Effects 0.000 description 2
- 238000004220 aggregation Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000004140 cleaning Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000000638 solvent extraction Methods 0.000 description 2
- 230000007547 defect Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种hadoop集群运行ETL的流程分解方法与装置,基于ETL流程各组件节点构造有向无环图,并搜索有向无环图中的reduce节点;如果搜索到reduce节点,则根据该reduce节点是否有直接数据源形成该reduce节点与其数据源的键值对;根据键值对构造每个reduce节点对应的mapper和reducer,进而构造MRWork;如果搜索不到reduce节点或存在数据源节点关联不到reduce节点,则基于数据源节点及其下游节点构造mapper,进而构造MRWork。本发明将ETL流程提交到hadoop集群环境mapreduce框架并发执行,不破坏流程完整性,编程实现更方便灵活。
Description
【技术领域】
本发明涉及数据处理技术领域,提供了一种hadoop集群运行ETL的流程分解方法与装置。
【背景技术】
ETL是数据处理、构建数据仓库的一个重要工具软件,完成异构数据源的抽取、清洗转换和加载的一个过程。传统的ETL一般是把流程发布到一个集中的ETL服务器节点上运行,所有的流程或流程内组件的运行均采用多线程机制,再多的流程也只能在一个单一节点运行,并且一个大数据的处理流程,也无法提高数据处理的性能。
Hadoop大数据平台在大数据处理中已经取得相当广泛的应用。MapReduce是面向大数据并行处理的计算模型、框架和平台,提供了一种简便的并行程序设计方法,用Map和Reduce两个函数编程实现基本的并行计算任务,提供了抽象的操作和并行编程接口,以简单方便地完成大规模数据的编程和计算处理。
ETL配置的流程一般为有向无环图,但hadoop提供的两个简单的map reduce函数只能完成简单DAG图的运行,无法完成稍微复杂一点DAG图的运行。而且,Hadoop虽然也提供了ChainMapper和ChainReducer的链式map reduce,但在数据源的分区、分区数据源读取、ETL流程运行完整性、使用的方便灵活性和通用性等方面都存在一定的缺陷。
鉴于此,克服上述现有技术所存在的缺陷是本技术领域亟待解决的问题。
【发明内容】
基于传统ETL数据处理性能的制约以及简单使用hadoop存在的问题,本发明提供了一种hadoop集群运行ETL的流程分解方法与装置,目的在于实现基于hadoop的分布式ETL框架,把流程分解并提交到hadoop集群环境中并发执行,保证流程完整性、通用性以及编程方便灵活性。
本发明通过如下技术方案达到上述目的:
第一方面,本发明提供了一种hadoop集群运行ETL的流程分解方法,将ETL流程分解并提交到hadoop集群环境map reduce框架中执行,其中流程分解方法包括:
基于ETL流程中的各组件节点构造ETL流程的有向无环图,并搜索所述有向无环图中的reduce节点;
如果在所述有向无环图中搜索到reduce节点,则根据该reduce节点是否有直接数据源对应,形成该reduce节点与其数据源间的键值对并保存;
根据保存的键值对分别构造每个reduce节点对应的mapper任务子流程和reducer任务子流程,进而构造出带reduce节点的MRWork;
如果在所述有向无环图中搜索不到reduce节点或存在数据源节点关联不到reduce节点,则基于数据源节点及其下游节点构造mapper任务子流程,进而构造出不带reduce节点的MRWork。
优选地,所述如果在所述有向无环图中搜索到reduce节点,则根据该reduce节点是否有直接数据源对应,形成该reduce节点与其数据源间的键值对并保存,具体为:
如果在所述有向无环图中搜索到reduce节点,则继续搜索该reduce节点的每个上游节点,以便寻找该reduce节点的数据源节点source;
如果搜索到该reduce节点的数据源节点source,且该数据源未被其他reduce节点占用,则将该reduce节点的直接输入路由线设置为reduce Sink Router,并形成对应的reduce-source键值对保存;
如果搜索到该reduce节点的数据源节点source,但该数据源被其他reduce节点占用,则将该reduce节点的直接输入路由线设置为file Sink Router,并形成对应的reduce-file Sink Router键值对保存;
如果搜索过程中搜索到其他reduce节点,则停止搜索,将该reduce节点的直接输入路由线设置为file Sink Router,并形成对应的reduce-file Sink Router键值对保存。
优选地,对于在所述有向无环图中搜索到的每个reduce节点,将reduce节点拆分为reduce Sink节点和reduce Source节点;其中,reduce Sink节点用于替换mapper任务中的reduce节点,reduce Source节点用于替换reducer任务中的reduce节点。
优选地,当ETL流程中存在file Sink Router时,将file Sink Router的上游节点和下游节点拆分到两个不同的MRWork;
其中,被上游节点使用时,在file Sink Router后面连接一个HDFS Sink节点,以便写入file Sink Router输出的数据;被下游节点使用时,在file Sink Router前面连接一个HDFS Source节点,以便读取HDFS Sink生成的文件。
优选地,对于存在reduce-source键值对的任一reduce节点,所述根据保存的键值对分别构造每个reduce节点对应的mapper任务子流程和reducer任务子流程,进而构造出带reduce节点的MRWork,具体为:
基于source节点以及source节点下游截止到fileSink Router和reduceSinkRouter的各组件节点,构造该reduce节点对应的mapper任务子流程;
基于reduce节点以及该reduce节点下游截止到file Sink Router的各组件节点,构造该reduce节点对应的reducer任务子流程;
将构造出的mapper任务子流程和reducer任务子流程置于一个map reduce作业中运行,进而构造出该reduce节点对应的MRWork。
优选地,当source节点下游无file Sink Router时,基于source节点以及source下游各组件节点,构造该reduce节点对应的mapper任务子流程;
当reduce节点下游无file Sink Router时,基于reduce节点以及该reduce节点下游的各组件节点,构造该reduce节点对应的reducer任务子流程。
优选地,对于存在reduce-file Sink Router键值对的任一reduce节点,所述根据保存的键值对分别构造每个reduce节点对应的mapper任务子流程和reducer任务子流程,进而构造出带reduce节点的MRWork,具体为:
构造该reduce节点的数据源节点HDFS Source,进而基于HDFS Source节点以及reduce Sink节点构造该reduce节点对应的mapper任务子流程;
基于reduce节点以及该reduce节点下游截止到file Sink Router的各组件节点,构造该reduce节点对应的reducer任务子流程;
将构造出的mapper任务子流程和reducer任务子流程置于一个map reduce作业中运行,进而构造出该reduce节点对应的MRWork。
优选地,当reduce节点下游无file Sink Router时,基于reduce节点以及该reduce节点下游的各组件节点,构造该reduce节点对应的reducer任务子流程。
优选地,所述reduce节点为排序组件节点、连接组件节点、聚合组件节点、去重复组件节点或增量比对组件节点。
第二方面,本发明还提供了一种hadoop集群运行ETL的流程分解装置,包括至少一个处理器和存储器,所述至少一个处理器和存储器之间通过数据总线连接,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令在被所述处理器执行后,用于完成第一方面所述的hadoop集群运行ETL的流程分解方法。
与传统技术相比,本发明的有益效果是:
本发明将ETL流程提交到hadoop集群环境map reduce框架执行,不破坏流程的完整性,基本保存了单服务器版ETL流程原有的顺序性,并且与单服务器ETL DAG运行逻辑一致;分解出流程的reduce节点以及reduce节点对应的数据源节点,从而分解出mapper子流程和reducer子流程,将整个流程拆分为一个或多个MRWork。与ChainMapper和ChainReducer的链式map reduce相比,编程实现更加方便灵活性,并且具备ETL DAG转mapreduce运行通用性。
【附图说明】
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种hadoop集群运行ETL的流程分解方法流程图;
图2为本发明实施例提供的一种无reduce节点有一个数据源时的ETL流程DAG示意图;
图3为本发明实施例提供的一种无reduce节点有多个数据源时ETL流程DAG示意图;
图4为本发明实施例提供的一种有reduce节点有一个数据源时的ETL流程DAG示意图;
图5为本发明实施例提供的一种有reduce节点有多个数据源时的ETL流程DAG示意图;
图6为本发明实施例提供的一种多个reduce节点相同数据源时的ETL流程DAG示意图;
图7为本发明实施例提供的一种有直接数据源对应的reduce节点的MRWork构造流程图;
图8为本发明实施例提供的一种无直接数据源对应的reduce节点的MRWork构造流程图;
图9为本发明实施例提供的一种ETL流程在无reduce节点有一个数据源时的分解示意图;
图10为本发明实施例提供的一种ETL流程在无reduce节点有多个数据源时的分解示意图;
图11为本发明实施例提供的一种ETL流程在有一个reduce节点一个数据源时的分解示意图;
图12为本发明实施例提供的一种ETL流程在有多个reduce节点相同数据源时的分解示意图;
图13为本发明实施例提供的一种hadoop集群运行ETL的流程分解装置架构图。
【具体实施方式】
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。下面就参考附图和实施例结合来详细说明本发明。
实施例1:
基于传统ETL数据处理性能的制约以及简单使用hadoop存在的问题,本发明实施例提供了一种hadoop集群运行ETL的流程分解方法,可将ETL流程分解,以便分解后提交到hadoop集群环境map reduce框架中执行。
其中,所述流程分解是指将ETL流程分解为一个或多个MRWork(即Map ReduceWork),每个MRWork的组件在一个map reduce中运行。一个MRWork的所有组件,通常是一部分在mapper中运行,一部分在reducer中运行,所有的mapper任务子流程与所有的reducer任务子流程就构成了一个MRWork。
如图1所示,本发明实施例提供的hadoop集群运行ETL的流程分解方法主要包括以下步骤:
步骤10,基于ETL流程中的各组件节点构造ETL流程的有向无环图,并搜索所述有向无环图中的reduce节点。
ETL流程一般有一个或多个数据源节点、一个或多个转换节点、一个或多个装载节点,所有这些组件节点组成一个有向无环图DAG。其中,数据从数据源节点到装载节点,有两种可能:1)数据一条一条沿着DAG往下游流动,直至装载完成;2)某个节点无法处理无序的单条数据,需要输入数据具备一定的顺序性才能完成转换处理。在这里,将需要输入数据具有顺序性或无序数据接收完毕后方可输出结果的组件节点定义为reduce节点,例如排序组件、连接组件、聚合组件、去重复组件、增量比对组件等。也就是说,在ETL流程中可能存在reduce节点也可能不存在reduce节点:如果数据处理只需要流式处理,则无reduce节点;如果需要数据具备一定的顺序性,则存在reduce节点。
结合图2-图6,根据ETL流程有无reduce节点,可以将ETL流程大致归为以下几类:1)无reduce节点,有一个数据源,对应的有向无环图如图2所示,数据清洗转换组件不是reduce组件;2)无reduce节点,有多个数据源,对应的有向无环图如图3所示,联合组件不是reduce节点,但是存在2个或2个以上数据源;3)带有reduce节点,有一个数据源,对应的有向无环图如图4所示,排序组件为reduce节点;4)带有reduce节点,有多个数据源,对应的有向无环图如图5所示,连接组件为reduce节点,存在2个数据源;5)多个reduce节点有相同数据源,对应的有向无环图如图6所示,排序组件、连接组件均为reduce节点,且共用数据源;其中排序组件1和连接组件共用数据源1,排序组件2和连接组件共用数据源2。
步骤20,如果在所述有向无环图中搜索到reduce节点,则根据该reduce节点是否有直接数据源对应,形成该reduce节点与其数据源间的键值对并保存。
在所述有向无环图中搜索到reduce节点证明ETL流程中存在reduce节点,如果ETL流程中存在X个reduce节点,至少需要X个map reduce,即ETL流程至少分解为X个MRWork,每个reduce节点对应一个MRWork。具体地,如果ETL流程中有X个reduce节点,且ETL流程中没有不带reduce节点的分支,则将ETL流程分解为X个MRWork,对应在X个map reduce中运行,X≥1,即此时MRWork的数量与reduce节点的数量是一致的,且map reduce中既有mapper又有reducer。如果ETL流程中有X个reduce节点,且ETL流程中含有不带reduce节点的分支,则将ETL流程分解为X+1个MRWork,对应在X+1个map reduce中运行;其中,所有不带reduce节点的分支,组成一个MRWork。
由前述介绍可知,流程中多个reduce节点可能共用一个数据源,出于效率的考虑,一个数据源只能被一个map reduce中的map来访问读取。当在所述有向无环图中搜索到reduce节点时,具体操作过程如下:
如果在所述有向无环图中搜索到reduce节点,则继续搜索该reduce节点的每个上游节点,以便寻找该reduce节点的数据源节点source。
如果能搜索到该reduce节点的数据源节点source,且该数据源未被其他reduce节点占用,也就是所有搜索到的数据源节点source都被该reduce节点占用,说明该reduce节点有直接数据源对应,则将该reduce节点的直接输入路由线设置为reduce Sink Router,并形成对应的reduce-source键值对保存。
如果能搜索到该reduce节点的数据源节点source,但该数据源已被其他reduce节点占用,说明该reduce节点无直接数据源对应,则将该reduce节点的直接输入路由线设置为file Sink Router,并形成对应的reduce-file Sink Router键值对保存。
如果在搜索过程中搜索到其他reduce节点,同样说明该reduce节点无直接数据源对应,则停止搜索,将该reduce节点的直接输入路由线设置为file Sink Router,并形成对应的reduce-file Sink Router键值对保存。
步骤30,根据保存的键值对分别构造每个reduce节点对应的mapper任务子流程和reducer任务子流程,进而构造出带reduce节点的MRWork。该步骤主要是针对有reduce节点的ETL流程,分以下两种情况:
1)对于存在reduce-source键值对的任一reduce节点,也就是有直接数据源对应的任一reduce节点,其MRWork构造过程可参考图7,具体包括以下步骤:
步骤301,基于每个source节点以及source节点下游截止到fileSink Router和reduceSink Router的各组件节点,构造该reduce节点对应的mapper任务子流程。特殊地,当source节点下游无file Sink Router时,基于source节点以及source下游各组件节点,构造该reduce节点对应的mapper任务子流程。其中,每个数据源可被拆分为多个分片数据源,mapper任务数可与对应数据源的总分片数一致,至少有一个mapper任务。
步骤302,基于reduce节点以及该reduce节点下游截止到file Sink Router的各组件节点,构造该reduce节点对应的reducer任务子流程。特殊地,当reduce节点下游无file Sink Router时,基于reduce节点以及该reduce节点下游的各组件节点,构造该reduce节点对应的reducer任务子流程。
步骤303,将构造出的mapper任务子流程和reducer任务子流程置于一个mapreduce作业中运行,进而构造出该reduce节点对应的MRWork。
2)对于存在reduce-file Sink Router键值对的任一reduce节点,也就是无直接数据源对应的任一reduce节点,其MRWork构造过程可参考图8,具体包括以下步骤:
步骤301’,构造该reduce节点的数据源节点HDFS Source,进而基于HDFS Source节点以及reduce Sink节点构造该reduce节点对应的mapper任务子流程。由于该reduce节点无直接数据源对应,因此需要构造一个数据源节点HDFSSource,用来读取上游file SinkRouter输出生成的hdfs文件。
步骤302’,基于reduce节点以及该reduce节点下游截止到file Sink Router的各组件节点,构造该reduce节点对应的reducer任务子流程。特殊地,当reduce节点下游无file Sink Router时,基于reduce节点以及该reduce节点下游的各组件节点,构造该reduce节点对应的reducer任务子流程。
步骤303’,将构造出的mapper任务子流程和reducer任务子流程置于一个mapreduce作业中运行,进而构造出该reduce节点对应的MRWork。
对ETL流程中的每个reduce节点都按照步骤301-303或步骤301’-303’进行操作,即可得到一个或多个带reduce节点的MRWork,这些MRWork中既包含mapper任务,又包含reducer任务。
进一步地,对于在所述有向无环图中搜索到的每个reduce节点,将reduce节点拆分为reduce Sink节点和reduce Source节点。其中,reduce Sink节点用来替换mapper任务中的reduce节点,以便向mapper context写入键值对<K,V>;reduce Source节点用来替换reducer任务中的reduce节点,以便从reducer context接收规约后的键值对<K,V>。
进一步地,当ETL流程中存在file Sink Router时,将file Sink Router的上游节点和下游节点拆分到两个不同的MRWork。被上游节点使用时,在file Sink Router后面连接一个HDFS Sink节点,以便写入file Sink Router输出的数据;被下游节点使用时,在file Sink Router前面连接一个HDFS Source节点,以便读取HDFS Sink生成的文件。其中,一个map reduce中的HDFS Sink节点写入完成时,HDFS Source所在的另外一个map reduce方可提交;也就是说,某个map reduce所依赖的所有HDFS Sink节点均写入完成时,此mapreduce方可提交运行。
步骤40,如果在所述有向无环图中搜索不到reduce节点或存在数据源节点关联不到reduce节点,则基于数据源节点及其下游节点构造mapper任务子流程,进而构造出不带reduce节点的MRWork。
如果ETL流程中没有reduce节点,则只需要构造mapper任务,不需要构造reducer任务。如果在所述有向无环图中搜索不到reduce节点或数据源节点source没有关联到任何一个reduce节点时,则所有这些数据源节点以及数据源下游节点组成一个mapper子流程,并在一个map reduce作业中运行,进而构造出对应的MRWork;只不过该MRWork中只有mapper任务,没有reducer任务。其中,每个数据源可被拆分为多个分片数据源,mapper任务数可与对应数据源的总分片数一致,至少有一个mapper任务。
当所有的MRWork构造完成后,将构造出的一个或多个MRWork提交到HadoopMapReduce框架运行。
综上所述,本发明实施例提供的方法具有以下有益效果:
ETL流程分解后提交到hadoop集群环境map reduce框架执行,不破坏流程的完整性,基本保存了单服务器版ETL流程原有的顺序性,并且与单服务器ETL DAG运行逻辑一致;
分解出流程的reduce节点以及reduce节点对应的数据源节点,从而分解出流程的哪一部分在mapper中执行,哪一部分在reducer中执行,最终将整个流程拆分为一个或多个MRWork;
与ChainMapper和ChainReducer的链式map reduce相比,编程实现更加方便灵活性,并且具备ETL DAG转mapreduce运行通用性。
实施例2:
在上述实施例1提供的一种hadoop集群运行ETL的流程分解方法的基础上,本发明实施例中进一步给出几个具体实例,介绍在不同的应用场景中分别如何使用实施例1中的方法进行流程分解。
结合图9,在第一个具体实例中,ETL流程中无reduce节点,有一个数据源,对应的有向无环图DAG如图9左图所示(对应图2)。由于在DAG中搜索不到reduce节点,所以直接将数据源节点及其下游所有组件节点组成一个mapper子流程,ETL流程分解成一个MRWork。在优选的实施例中,可将数据源分片得到n个分片表数据源,分别为split1、split2、......、splitn,对应得到n个mapper子流程,如图9中右图所示,一个分片数据源split对应一个mapper,所有mapper构成一个MRWork,且该MRWork中无reducer任务。
结合图10,在第二个具体实例中,ETL流程中无reduce节点,有多个数据源,此处以两个数据源为例,分别记为数据源1和数据源2,对应的有向无环图DAG如图10最左图所示(对应图3)。由于在DAG中搜索不到reduce节点,所以直接将每个数据源节点及其下游所有组件节点组成一个mapper子流程,则可得到两个mapper子流程,如图10中间图所示,两个mapper子流程构成一个MRWork。在优选的实施例中,可将两个数据源分别分片,得到2n个分片表数据源,对应得到2n个mapper子流程,如图10最右图所示,一个分片数据源split对应一个mapper,所有的2n个mapper构成一个MRWork,且该MRWork中无reducer任务。
结合图11,在第三个具体实例中,ETL流程中带有一个reduce节点,有一个数据源,此处以reduce节点为排序组件为例,对应的有向无环图DAG如图11左图所示(对应图4)。在DAG中搜索到一个reduce节点,即排序组件,且该排序组件对应的数据源未被其他reduce节点占用(因为仅有一个reduce节点),则将该排序组件的直接输入路由线设置为reduceSink Router。排序组件被拆成两部分,一部分为sort reduce sink,一部分为sort reducesource;其中,sort reduce sink表示数据以key/value结构写入mapper context的节点,sort reduce source表示从reducer contrext接收key/values的节点)。这就相当于reduce Sink Router的上下游节点分别为sort reduce sink和sort reduce source。
在构造MRWork时,数据源节点及其下游截止到reduceSink Router的所有组件节点,即数据源节点和sort reduce sink节点构成对应的mapper任务子流程;sort reducesource节点下游无file Sink Router,则sortreduce source节点及其下游所有组件节点,即sortreduce source节点和数据装载组件节点构成对应的reducer任务子流程。因此可得到一个mapper子流程和一个reducer子流程,如图11中间图所示,两个子流程构成一个MRWork,且map reduce中既有mapper又有reducer。在优选的实施例中,可对数据源进行分片得到n个分片数据源,分别记为split1、split2、......、splitn,则可对应得到n个mapper子流程,如图11最右图所示,一个分片数据源split对应一个mapper。n个mapper和一个reducer构成一个MRWork,整个流程实际上分解为n+1个子流程。
结合图12,在第四个具体实例中,ETL流程中带有多个reduce节点并有相同数据源。此处以带有三个reduce节点为例,分别为排序组件1、连接组件和排序组件2;以两个数据源为例,分别为数据源1和数据源2;其中,排序组件1和连接组件共用数据源1,排序组件2和连接组件共用数据源2。由于带有三个reduce节点,所以最终分解成三个MRWork,分别记为MRWork1、MRWork2、MRWork3,对应在三个map reduce中运行,且三个map reduce中都是既有mapper又有reducer。
在DAG中搜索reduce节点时先搜索到连接组件,由于连接组件有直接数据源对应,即数据源1和数据源2,因此连接组件的两个直接输入路由线分别设置为reduce SinkRouter1和reduce Sink Router2。然后搜索到排序组件1和排序组件2,由于没有直接数据源对应,因此排序组件1的直接输入路由线设置为file Sink Router1,排序组件2的直接输入路由线设置为file Sink Router2。其中,file Sink Router1的上下游节点被拆分到两个MRWork,file Sink Router2的上下游节点也被拆分到两个MRWork。
在构造连接组件的MRWork(即MRWork1)时,连接组件被拆分为join reduce sink和join reduce source,相当于reduce Sink Router1的上下游节点分别为join reducesink和join reduce source,reduce Sink Router2的上下游节点同样分别为joinreducesink和join reduce source。数据源1及其下游截止到file Sink Router1和reduce SinkRouter1的所有组件节点,以及数据源2及其下游截止到file Sink Router2和reduce SinkRouter2的所有组件节点,组成MRWork1的mapper;如果不进行数据源分片的话,则形成两个mapper,数据源1和数据源2分别对应一个mapper。join reduce source节点及其下游的数据装载组件2构成对应的reducer。
在构造排序组件1的MRWork(即MRWork2)时,先构造排序组件1的数据源节点HDFSSource,并将排序组件1拆分为sort reduce sink1和sort reduce source1,HDFS Source节点以及sort reduce sink1节点形成对应的mapper;sortreduce source1及其下游的数据装载组件1构成对应的reducer。在构造排序组件2的MRWork(即MRWork3)时,也是同样的机理,在此不做赘述。其中,当数据源进行分片时,对应的处理方式可参考前四个具体实例,在此不做赘述。
实施例3:
由上述实施例1提供的hadoop集群运行ETL的流程分解方法可知,如果ETL流程中存在X个reduce节点,至少需要X个map reduce,即ETL流程至少分解为X个MRWork。
以图6和图12为例,ETL流程中包括排序组件1、连接组件和排序组件2共三个reduce节点,因此可以将这个复杂的ETL流程分为三个MRWork,分别记为MRWork1、MRWork2、MRWork3,每个MRWork所有的组件节点在一个map reduce中运行。MRWork数据结构大致如下:
在上述数据结构中,ActivityBean为每个组件属性保存者。
multiMapSourceActivityBeansMap为定义的一个map变量,其中的key为数据源ActivityBean,value为该数据源以及该数据源下游截止到fileSink Router和reduceSinkRouter的所有组件节点;当该数据源下游无fileSink Router时,则value为该数据源以及该数据源下游所有组件节点。其中,一个map可能会对应有一个或多个数据源,例如,排序组件对应一个数据源,而联合组件、连接组件等可对应多个数据源。每个数据源可被拆分为多个分片数据源,mapper任务数可与数据源的总分片数保持一致,则multiMapSourceActivityBeansMap中value对应的ActivityBeans会在map中的一个或多个mapper任务中运行,即每个分片数据源及对应的下游组件对应在一个mapper任务中运行。
reuduceActivityBeans为MRWork中的reduce节点以及reduce节点下游截止到fileSink Router的所有组件节点;当reduce节点下游无fileSink Router时,则包括该reduce节点以及该reduce节点下游所有组件节点。由此可知,reuduceActivityBeans中的第一个ActivityBean为reduce节点。其中,reuduceActivityBeans中的所有组件节点在reduce的一个或多个reducer任务中运行。
由前文可知,ETL流程有可能被分解为一个或多个MRWork。当被分解为多个MRWork时,多个MRWork之间是存在依赖关系的,对于任一MRWork,该MRWork的运行需要依赖于其他MRWork的FileSink组件节点,需要等该MRWork所依赖的所有FileSink组件运行完成后,再提交该MRWork运行。以图12为例,MRWork2依赖MRWork1中的fileSink1,当fileSink1对应的fileSink组件运行完成后,才可启动提交MRWork2;同样地,MRWork3依赖MRWork1中的fileSink2。因此,当被分解为多个MRWork时,需要在MRWork中定义该MRWork所依赖的fileSink组件节点的ID,也就是上述数据结构中的dependentFileSinkNodeIds。
基于MRWork的上述数据结构,构造数据结构Map<ReduceActivity,SoureActivity[]>reduceSourcesMap,则ETL的流程分解过程具体如下:
1.构造ETL流程ActivityGraph
ActivityGraph是指ETL流程的有向无环图,ActivityGraph中的各组件Activity均设置有该组件是否为reduce组件。
2.搜索reduce组件
从ActivityGraph中搜索reduce组件,一旦搜索到,则继续搜索该reduce组件所有的上游组件,寻找数据源节点。
1)如果搜索到的数据源节点未被其它reduce组件占用,则设置reduce组件的直接输入路由线为reduceSinkRouter,并保存reduceActivity和source Activity[]的KV键值对于reduceSourcesMap。
2)如果搜索到的数据源节点已经被其它reduce组件占用,无直接数据源对应;如果搜索过程中碰到其它reduce组件,则停止搜索,无直接数据源对应。对于这两种无直接数据源对应的reduce组件,设置reduce组件的直接输入路由线为file Sink Router,并以reduceActivity和reduce的输入线file Sink Router构造KV键值对保存于reduceSourcesMap。reduceSourcesMap供后续使用。
3.构造带reduce节点的MRWorks
循环reduceSourcesMap中的<K,V>键值对,循环至每个reduce组件对应的<K,V>键值对时,对应的MRWork构造过程如下:
1)拆分reduce节点为reduceSink和reduceSource。其中,reduceSink在map graph中替换reduce节点,reduceSource在reduce graph中替换reduce节点。
2)将file Sink Router的上游节点和下游节点拆分到两个不同的MRWork。被上游节点使用时,需要在file Sink Router后面连接一个HDFS Sink节点;被下游节点使用时,需要在file Sink Router前面连接一个HDFS Source节点,用来读取HDFS Sink生成的文件。
3)搜索K键ReduceActivity节点下游截止到file Sink Router的所有组件节点;当下游无file Sink Router时,搜索reduceActivity节点下游所有组件节点。reduceSource以及搜索出的所有这些组件节点ActivityBeans就组成该reduce组件对应的MRWork的reuduceActivityBeans。
4)搜索V值SoureActivity[]的每个数据源下游截止到file Sink Router和reduce Sink Router的所有组件节点;当下游无file Sink Router时,搜索数据源下游所有组件节点。每个数据源source以及搜索出的所有这些组件节点ActivityBeans就组成MRWork的multiMapSourceActivityBeansMap。其中,SoureActivity为file Sink Router时,需要构造一个HDFS Source节点作为数据源,HDFS Source节点以及reduceSink组成MRWork的multiMapSourceActivityBeansMap。
5)设置每个MRWork所依赖的fileSink组件的ID,即设置dependentFileSinkNodeIds。
循环reduceSourcesMap完毕后,得到每个reduce节点对应的MRWork,然后输出所有reduce节点的MRWorks。
4.构造不带reduce节点的MRWork
如果步骤2中从ActivityGraph中搜索不到reduce节点或存在数据源source节点没有关联到任何一个reduce节点,则每个source以及source下游所有ActivityBeans组成MRWork的multiMapSourceActivityBeansMap,MRWork的reuduceActivityBeans为null,得到不带reduce节点的MRWork。其中,不带reduce节点的MRWork最多只存在一个。构造完成后,输出对应的MRWork。
5.提交所有的MRWorks到Hadoop MapReduce框架运行流程。
基于本发明实施例提供的上述方法,ETL流程分解后提交到hadoop集群环境mapreduce框架执行,不破坏流程的完整性,基本保存了单服务器版ETL流程原有的顺序性,并且与单服务器ETL DAG运行逻辑一致;分解出流程的reduce节点以及reduce节点对应的数据源节点,从而分解出流程的哪一部分在mapper中执行,哪一部分在reducer中执行,最终将整个流程拆分为一个或多个MRWork;与ChainMapper和ChainReducer的链式map reduce相比,编程实现更加方便灵活性,并且具备ETL DAG转mapreduce运行通用性。
实施例4:
在上述实施例1-实施例3提供的hadoop集群运行ETL的流程分解方法的基础上,本发明还提供了一种可用于实现上述方法的hadoop集群运行ETL的流程分解装置,如图13所示,是本发明实施例的装置架构示意图。本实施例的hadoop集群运行ETL的流程分解装置包括一个或多个处理器21以及存储器22。其中,图13中以一个处理器21为例。
所述处理器21和所述存储器22可以通过总线或者其他方式连接,图13中以通过总线连接为例。
所述存储器22作为一种hadoop集群运行ETL的流程分解方法非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如实施例1中的hadoop集群运行ETL的流程分解方法。所述处理器21通过运行存储在所述存储器22中的非易失性软件程序、指令以及模块,从而执行hadoop集群运行ETL的流程分解装置的各种功能应用以及数据处理,即实现实施例1-实施例3的hadoop集群运行ETL的流程分解方法。
所述存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,所述存储器22可选包括相对于所述处理器21远程设置的存储器,这些远程存储器可以通过网络连接至所述处理器21。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
所述程序指令/模块存储在所述存储器22中,当被所述一个或者多个处理器21执行时,执行上述实施例1中的hadoop集群运行ETL的流程分解方法,例如,执行以上描述的图1、图7和图8所示的各个步骤。
本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取存储器(RAM,RandomAccessMemory)、磁盘或光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种hadoop集群运行ETL的流程分解方法,其特征在于,将ETL流程分解并提交到hadoop集群环境map reduce框架中执行,其中流程分解方法包括:
基于ETL流程中的各组件节点构造ETL流程的有向无环图,并搜索所述有向无环图中的reduce节点;
如果在所述有向无环图中搜索到reduce节点,则根据该reduce节点是否有直接数据源对应,形成该reduce节点与其数据源间的键值对并保存;
根据保存的键值对分别构造每个reduce节点对应的mapper任务子流程和reducer任务子流程,进而构造出带reduce节点的MRWork;
如果在所述有向无环图中搜索不到reduce节点或存在数据源节点关联不到reduce节点,则基于数据源节点及其下游节点构造mapper任务子流程,进而构造出不带reduce节点的MRWork。
2.根据权利要求1所述的hadoop集群运行ETL的流程分解方法,其特征在于,所述如果在所述有向无环图中搜索到reduce节点,则根据该reduce节点是否有直接数据源对应,形成该reduce节点与其数据源间的键值对并保存,具体为:
如果在所述有向无环图中搜索到reduce节点,则继续搜索该reduce节点的每个上游节点,以便寻找该reduce节点的数据源节点source;
如果搜索到该reduce节点的数据源节点source,且该数据源未被其他reduce节点占用,则将该reduce节点的直接输入路由线设置为reduce Sink Router,并形成对应的reduce-source键值对保存;
如果搜索到该reduce节点的数据源节点source,但该数据源被其他reduce节点占用,则将该reduce节点的直接输入路由线设置为file Sink Router,并形成对应的reduce-file Sink Router键值对保存;
如果搜索过程中搜索到其他reduce节点,则停止搜索,将该reduce节点的直接输入路由线设置为file Sink Router,并形成对应的reduce-file Sink Router键值对保存。
3.根据权利要求2所述的hadoop集群运行ETL的流程分解方法,其特征在于,对于在所述有向无环图中搜索到的每个reduce节点,将reduce节点拆分为reduce Sink节点和reduce Source节点;其中,reduce Sink节点用于替换mapper任务中的reduce节点,reduceSource节点用于替换reducer任务中的reduce节点。
4.根据权利要求2所述的hadoop集群运行ETL的流程分解方法,其特征在于,当ETL流程中存在file Sink Router时,将file Sink Router的上游节点和下游节点拆分到两个不同的MRWork;
其中,被上游节点使用时,在file Sink Router后面连接一个HDFS Sink节点,以便写入file Sink Router输出的数据;被下游节点使用时,在file Sink Router前面连接一个HDFS Source节点,以便读取HDFS Sink生成的文件。
5.根据权利要求2所述的hadoop集群运行ETL的流程分解方法,其特征在于,对于存在reduce-source键值对的任一reduce节点,所述根据保存的键值对分别构造每个reduce节点对应的mapper任务子流程和reducer任务子流程,进而构造出带reduce节点的MRWork,具体为:
基于source节点以及source节点下游截止到fileSink Router和reduceSink Router的各组件节点,构造该reduce节点对应的mapper任务子流程;
基于reduce节点以及该reduce节点下游截止到file Sink Router的各组件节点,构造该reduce节点对应的reducer任务子流程;
将构造出的mapper任务子流程和reducer任务子流程置于一个map reduce作业中运行,进而构造出该reduce节点对应的MRWork。
6.根据权利要求5所述的hadoop集群运行ETL的流程分解方法,其特征在于,当source节点下游无file Sink Router时,基于source节点以及source下游各组件节点,构造该reduce节点对应的mapper任务子流程;
当reduce节点下游无file Sink Router时,基于reduce节点以及该reduce节点下游的各组件节点,构造该reduce节点对应的reducer任务子流程。
7.根据权利要求2所述的hadoop集群运行ETL的流程分解方法,其特征在于,对于存在reduce-file Sink Router键值对的任一reduce节点,所述根据保存的键值对分别构造每个reduce节点对应的mapper任务子流程和reducer任务子流程,进而构造出带reduce节点的MRWork,具体为:
构造该reduce节点的数据源节点HDFS Source,进而基于HDFS Source节点以及reduceSink节点构造该reduce节点对应的mapper任务子流程;
基于reduce节点以及该reduce节点下游截止到file Sink Router的各组件节点,构造该reduce节点对应的reducer任务子流程;
将构造出的mapper任务子流程和reducer任务子流程置于一个map reduce作业中运行,进而构造出该reduce节点对应的MRWork。
8.根据权利要求7所述的hadoop集群运行ETL的流程分解方法,其特征在于,当reduce节点下游无file Sink Router时,基于reduce节点以及该reduce节点下游的各组件节点,构造该reduce节点对应的reducer任务子流程。
9.根据权利要求1-8任一所述的hadoop集群运行ETL的流程分解方法,其特征在于,所述reduce节点为排序组件节点、连接组件节点、聚合组件节点、去重复组件节点或增量比对组件节点。
10.一种hadoop集群运行ETL的流程分解装置,其特征在于,包括至少一个处理器和存储器,所述至少一个处理器和存储器之间通过数据总线连接,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令在被所述处理器执行后,用于完成权利要求1-9任一所述的hadoop集群运行ETL的流程分解方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011571984.0A CN112667719A (zh) | 2020-12-27 | 2020-12-27 | 一种hadoop集群运行ETL的流程分解方法与装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011571984.0A CN112667719A (zh) | 2020-12-27 | 2020-12-27 | 一种hadoop集群运行ETL的流程分解方法与装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112667719A true CN112667719A (zh) | 2021-04-16 |
Family
ID=75410108
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011571984.0A Pending CN112667719A (zh) | 2020-12-27 | 2020-12-27 | 一种hadoop集群运行ETL的流程分解方法与装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112667719A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114385140A (zh) * | 2021-12-29 | 2022-04-22 | 武汉达梦数据库股份有限公司 | 基于flink框架的ETL流程组件多个不同输出的处理方法与装置 |
CN114385138A (zh) * | 2021-12-29 | 2022-04-22 | 武汉达梦数据库股份有限公司 | 一种Flink框架运行ETL的流程联合组件方法和装置 |
CN114385137A (zh) * | 2021-12-29 | 2022-04-22 | 武汉达梦数据库股份有限公司 | 一种Flink框架运行ETL的流程方法和装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105912636A (zh) * | 2016-04-08 | 2016-08-31 | 金蝶软件(中国)有限公司 | 一种基于Map/Reduce的ETL数据处理方法和装置 |
CN106055311A (zh) * | 2016-05-26 | 2016-10-26 | 浙江工业大学 | 基于流水线多线程的MapReduce任务并行化方法 |
US20170169336A1 (en) * | 2015-12-15 | 2017-06-15 | Tata Consultancy Services Limited | Systems and methods for generating performance prediction model and estimating execution time for applications |
CN111914007A (zh) * | 2020-06-15 | 2020-11-10 | 武汉达梦数据库有限公司 | 一种hadoop集群运行ETL流程的方法及装置 |
-
2020
- 2020-12-27 CN CN202011571984.0A patent/CN112667719A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170169336A1 (en) * | 2015-12-15 | 2017-06-15 | Tata Consultancy Services Limited | Systems and methods for generating performance prediction model and estimating execution time for applications |
CN105912636A (zh) * | 2016-04-08 | 2016-08-31 | 金蝶软件(中国)有限公司 | 一种基于Map/Reduce的ETL数据处理方法和装置 |
CN106055311A (zh) * | 2016-05-26 | 2016-10-26 | 浙江工业大学 | 基于流水线多线程的MapReduce任务并行化方法 |
CN111914007A (zh) * | 2020-06-15 | 2020-11-10 | 武汉达梦数据库有限公司 | 一种hadoop集群运行ETL流程的方法及装置 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114385140A (zh) * | 2021-12-29 | 2022-04-22 | 武汉达梦数据库股份有限公司 | 基于flink框架的ETL流程组件多个不同输出的处理方法与装置 |
CN114385138A (zh) * | 2021-12-29 | 2022-04-22 | 武汉达梦数据库股份有限公司 | 一种Flink框架运行ETL的流程联合组件方法和装置 |
CN114385137A (zh) * | 2021-12-29 | 2022-04-22 | 武汉达梦数据库股份有限公司 | 一种Flink框架运行ETL的流程方法和装置 |
CN114385137B (zh) * | 2021-12-29 | 2022-11-08 | 武汉达梦数据库股份有限公司 | 一种Flink框架运行ETL的流程方法和装置 |
CN114385138B (zh) * | 2021-12-29 | 2023-01-06 | 武汉达梦数据库股份有限公司 | 一种Flink框架运行ETL的流程联合组件方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112667719A (zh) | 一种hadoop集群运行ETL的流程分解方法与装置 | |
Xin et al. | Graphx: Unifying data-parallel and graph-parallel analytics | |
US10515118B2 (en) | Processing a data flow graph of a hybrid flow | |
CN108874982A (zh) | 一种基于Spark大数据框架离线实时处理数据的方法 | |
CN116822422B (zh) | 数字逻辑电路的分析优化方法及相关设备 | |
Phan et al. | Toward intersection filter-based optimization for joins in mapreduce | |
CN111159268B (zh) | 一种ETL流程在Spark集群中运行的方法和装置 | |
Sampath et al. | An efficient weighted rule mining for web logs using systolic tree | |
CN111914007A (zh) | 一种hadoop集群运行ETL流程的方法及装置 | |
Gombos et al. | Spar (k) ql: SPARQL evaluation method on Spark GraphX | |
CN112667593B (zh) | 一种ETL流程执行hbase快速装载的方法与装置 | |
Cheng et al. | Optimal alignments between large event logs and process models over distributed systems: An approach based on Petri nets | |
Nakano | Asynchronous memory machine models with barrier synchronization | |
CN114385136B (zh) | 一种Flink框架运行ETL的流程分解方法和装置 | |
EP3113038B1 (en) | A data handling method | |
CN113032450B (zh) | 一种数据存储与检索方法、系统、存储介质、处理终端 | |
CN110851178B (zh) | 一种基于分布式图可达计算的过程间程序静态分析方法 | |
CN114238576A (zh) | 数据匹配方法、装置、计算机设备和存储介质 | |
Kang et al. | A comparative analysis of iterative MapReduce systems | |
Burkhardt | Graph connectivity in log steps using label propagation | |
CN112163030A (zh) | 多表批量操作方法、系统及计算机设备 | |
Gao et al. | Exploiting sharing join opportunities in big data multiquery optimization with Flink | |
Miura et al. | An FPGA-based Accelerator for Regular Path Queries over Edge-labeled Graphs | |
CN114385137B (zh) | 一种Flink框架运行ETL的流程方法和装置 | |
Kasarkin et al. | New iteration parallel-based method for solving graph NP-complete problems with reconfigurable computer systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20210416 |