MapReduce计算框架下的可迭代式数据处理方法

文档序号:6523745阅读:227来源:国知局
MapReduce计算框架下的可迭代式数据处理方法
【专利摘要】本发明提出一种MapReduce计算框架下的可迭代式数据处理方法,包括以下步骤:S10、读取原始数据,将原始数据解析成独立数据项;S20、采用Shuffle?Grouping机制将所述输入数据分发至各线程或进程进行处理;S30、对数据进行哈希重组、排序,并采用Fields?Grouping机制将排序后数据分发至各线程或进程;S40、各线程或进程实时对缓冲池中数据进行排序、分组;S50、将数据发送至线程或进程进行处理;S60、将返回的计算结果解析成独立数据项,重复步骤S20至S50,直至发出表示停止迭代的数据项。本发明可保持MapReduce的计算性能不因迭代而受到影响,也降低了虚拟机的创建和销毁的开销。
【专利说明】MapReduce计算框架下的可迭代式数据处理方法
【【技术领域】】
[0001]本发明涉及一种MapReduce计算框架下的可迭代式数据处理方法。
【【背景技术】】
[0002]在大数据时代,数据量成爆炸式增长,这对数据的计算处理提出了极高的要求。Hadoop生态圈的提出为海量数据的大规模计算和分布式可靠存储提供了一个强大的工具。在Hadoop中,MapReduce是一个为海量数据计算提供可靠、易用、可规模化的关键组件,所基于的MapReduce计算框架对于许多数据分析和计算方法十分友好,这使得MapReduce计算框架在海量数据分析中具有广泛的应用。然而,在现实使用中,MapReduce计算框架下迭代计算执行受到了 Hadoop生态圈实现的制约,从而导致迭代计算性能受到影响。
[0003]在MapReduce计算框架下,数据集MassiveDataSet会被划分为若干个数据块,然后每个Map处理一个数据块,并输出一个由key-value对组成的队列,在shuffle阶段,会对所有key-value对执行哈希重组和根据key排序,组成key_value_list对,然后在Reduce阶段,每个key_value_list对都会被单独处理并输出结果。
[0004]MapReduce计算框架下迭代计算受到以下限制:(I)两个MapReduce任务之间的中间数据必须被写回Hadoop Distributed File System中,因此导致性能受到损失。(2)Map和Reduce自身无法迭代执行,如果要求迭代计算的话,需要串联两个MapReduce,导致Java虚拟机的创建和销毁开销,影响性能。为解决以上问题,现有技术采用串联多个MapReduce任务,然而依然存在如下缺点: (I)两个MapReduce任务之间的中间数据必须被写回HadoopDistributed FileSystem (HDFS)中,因此导致性能损失。(2)Map和Reduce自身无法迭代执行,如果要求迭代计算的话,需要串联两个MapReduce,导致Java虚拟机的创建和销毁开销,影响性能。

【发明内容】

[0005]本发明旨在解决上述现有技术中存在的问题,提出一种MapReduce计算框架下的可迭代式数据处理方法。
[0006]本发明提出的MapReduce计算框架下的可迭代式数据处理方法,包括以下步骤:S10、ReadNode从Hadoop分布式文件系统中读取原始数据,并将所述原始数据解析成独立数据项,以所述独立数据项作为MapNode的输入数据;S20、MapNode采用ShuffIe Grouping机制将所述输入数据分发至MapNode的各线程或进程进行处理,对于每一所述独立数据项输出〈key, value〉格式数据;S30、ShuffIeNode对〈key, value〉进行哈希重组、基于key值执行排序,并采用FieldsGrouping机制将排序后的〈key, value〉分发至ShuffleNode的各线程或进程;S40、ShuffleNode的各线程或进程实时将〈key, value〉存入本地KVlist缓冲池,直至收到表示数据发送完毕的〈key, value),基于key值对KVlist缓冲池中的〈key, value〉进行排序、分组,对每一分组输出{i,〈key, value_list>}格式数据,其中,i为当前线程或进程编号;S50、ReduceNode将{i,〈key, value_list>}发送至其第i个线程或进程进行处理,输出〈key’ , value’ > ;S60>CoordinateNode 接收并缓冲〈key’ , value’ > 直至接收到表示发送完毕的数据项,CoordinateNode将基于〈key’,value’ >的计算结果返回至ReadNode, ReadNode将所述计算结果解析成独立数据项,重复步骤S20至S50进行迭代,直至ReduceNode发出表示停止迭代的数据项,CoordinateNode退出。
[0007]本发明提出的MapReduce计算框架下的可迭代式数据处理方法基于流式计算实现可迭代MapReduce计算框架,可保持MapReduce的计算性能不会因为迭代而受到影响。该方法使中间数据不用写回分布式文件系统,也避免java虚拟机的创建和销毁的开销,并可以支持更灵活和更高效的数据分析和处理算法的实现。
【【专利附图】

【附图说明】】
[0008]图1为本发明提出的的MapReduce计算框架下的可迭代式数据处理方法流程图。
[0009]图2为为本发明实施例之一的MapReduce计算框架下的可迭代式数据处理方法拓扑结构图。
[0010]图3为为本发明实施例之二的MapReduce计算框架下的可迭代式数据处理方法拓扑结构图。
[0011]图4为为本发明实施例之三的MapReduce计算框架下的可迭代式数据处理方法拓扑结构图。 【【具体实施方式】】
[0012]下面结合具体实施例及附图对本发明作进一步详细说明。下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明的技术方案,而不应当理解为对本发明的限制。
[0013]在本发明的描述中,术语“内”、“外”、“纵向”、“横向”、“上”、“下”、“顶”、“底”等指
示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明而不是要求本发明必须以特定的方位构造和操作,因此不应当理解为对本发明的限制。
[0014]本发明提供一种MapReduce计算框架下的可迭代式数据处理方法。如图1所示,该方法包括以下步骤:S10、ReadNode从Hadoop分布式文件系统中读取原始数据,并将所述原始数据解析成独立数据项,以所述独立数据项作为MapNode的输入数据;S20、MapNode采用Shuffle Grouping机制将所述输入数据分发至MapNode的各线程或进程进行处理,对于每一所述独立数据项输出〈key, value〉格式数据;S30、ShuffleNode对〈key, value〉进行哈希重组、基于key值执行排序,并采用Fields Grouping机制将排序后的〈key, value〉分发至ShuffleNode的各线程或进程;S40、Shuff IeNode的各线程或进程实时将〈key, value〉存入本地KVlist缓冲池,直至收到表示数据发送完毕的〈key, value),基于key值对KVlist缓冲池中的〈key, value〉进行排序、分组,对每一分组输出{i,〈key, value_list>}格式数据,其中,i为当前线程或进程编号;S50、ReduceNode将{i, <key, value_list>}发送至其第i个线程或进程进行处理,输出〈key’ , value’ > ;S60> CoordinateNode接收并缓冲〈key’,value’ >直至接收到表示发送完毕的数据项,CoordinateNode将基于〈key’,value’ >的计算结果返回至ReadNode, ReadNode将所述计算结果解析成独立数据项,重复步骤S20至S50进行迭代,直至ReduceNode发出表示停止迭代的数据项,CoordinateNode 退出。
[0015]具体地,可一并参照图2。本发明提出的MapReduce计算框架下的可迭代式数据处理方法基于流式计算,即使用流式计算实现MapReduce计算框架的Map阶段、Shuffle阶段、Reduce阶段并使用流式计算实现迭代机制。
[0016]本发明提出的MapReduce计算框架下的可迭代式数据处理方法的整个拓扑结构由五种节点构成:ReadNode, MapNode, ShuffleNode, ReduceNode, CoordinateNode。ReadNode负责从分布式文件系统(Hadoop Distributed FileSystem, HDFS)中读取原始数据,并解析成一个个独立的数据项输入拓扑结构中;MapNode负责实现MapReduce计算框架的Map阶段,该节点的线程或进程数量决定了 Map数量;ShuffleNode负责实现MapReduce计算框架的Shuffle阶段,该节点的线程或进程数量等于ReduceNode的线程或进程数量;ReduceNode负责实现MapReduce计算框架的Reduce阶段,该节点的线程或进程数量决定了Reduce数量。CoordinateNode负责执行迭代时的数据收集和数据同步。
[0017]其中,MapNode用于实现MapReduce计算框架中的Map阶段,MapNode接收ReadNode输出的数据项,优选地,MapNode中的线程或进程数就是Map数量,这与“Hadoop的MapReduce计算框架的Map数量由数据块数量决定”不一样;由于数据集中的数据项之间没有关联性,所以为了平衡各个线程或进程的计算负载,MapNode使用shuffIeGrouping机制来分发其所接收到的数据给各个线程或进程,对于每个数据项,MapNode执行计算并输出一个〈key, value〉;当MapNode接收到一个特定表示数据集发送完毕的数据项时,贝U输出一个特定表示数据发送完毕的〈key, value) ;ShuffleNode用于实现MapReduce计算框架中的Shuffle阶段,ShuffleNode接收MapNode输出的数据项,优选地,ShuffleNode中的线程或进程数等于ReduceNode的线程或者进程数,Shuff IeNode中一个线程的所有输出都必须由ReduceNode中任一对应的线程接收;ShuffleNode负责对所接收到的〈key, value〉进行哈希重组,并且根据key执行排序,因此ShuffleNode使用FieldsGrouping来分发所接收到的〈key, value〉;ShuffleNode的每个线程或进程,对于接收到的一个〈key, value〉,先将其放入本地的一个缓冲池(KVlist),直到接收到一个特定表示所有数据发送完毕的〈key, value〉,当ShuffleNode的一个线程或进程接收到一个特定表示所有数据发送完毕的〈key, value)后,则基于key,先对KVlist中所有〈key, value)进行排序,然后再把所有〈key, value)分组,把相同key的〈key, value)归到一组。对于一个分组,生成一个〈key, value_list>,最终输出{i,〈key, value_list>},其中,i为当前线程或进程的编号;当一个线程处理完KVlist后,输出一个特定表示数据发送完毕的数据项。
[0018]ReduceNode用于实现MapReduce计算框架中的Reduce阶段,ReduceNode接收ShuffleNode输出的数据项:对于{i,〈key, value_list>},则发送到ReduceNode的第i个线程或进程
[0019]对于ReduceNode的一个线程或进程来说,每接收到一个{i,〈key, value_list>},则处理一个〈key, value_list>并输出以〈key’ , value’ >格式输出结果。
[0020]CoordinateNode负责迭代机制的数据缓冲、数据同步和数据计算。CoordinateNode对于接收到的数据分配给其内部各个线程或进程的机制由具体应用而定。
[0021]当一个节点Nodei需要执行迭代操作时,Nodei先把数据项发送到CoordinateNode中,CoordinateNode会接收并缓冲所有数据项直到接收到一个特定表示发送完毕的数据项,然后Coordinate会基于所接收到的数据项执行计算,并把计算结果返回给Nodei,直到Nodei发出一个特定表示停止迭代的数据项时,CoordinateNode将退出。
[0022]其中图2所示为:CoordinateNode接收并缓冲〈key’ , value’ >直至接收到表示发送完毕的数据项,CoordinateNode将基于〈key’,value’ >的计算结果返回至ReadNode, ReadNode将所述计算结果解析成独立数据项,重复步骤S20至S50进行迭代,直至ReduceNode发出表示停止迭代的数据项,CoordinateNode退出
[0023]图3所示为在执行步骤S20之后,CoordinateNode接收并缓冲〈key, value〉直至接收到表示发送完毕的数据项,CoordinateNode将基于〈key, value)的计算结果返回至MapNode,再以该计算结果作为MapNode的输入数据重新执行步骤S20。
[0024]图4所示为在执行步骤S40之后,CoordinateNode接收并缓冲{i,〈key, value_list〉}直至接收到表示发送完毕的数据项,CoordinateNode将基于{i,〈key, value_list〉}的计算结果返回至ShuffleNode,再以该计算结果作为ShuffleNode的输入数据重新执行步骤S30以及S40。
[0025]对于图3所描述的实施例,举例而言,对于一个数据集Set,首先ReadNode会接收并解析成一个个数据项DataEntryi,然后发送给MapNode ;MapNode把接收到的数据项按照ShuffleGrouping的方式分发给其内部的各个线程,对于MapNode中的一个线程来说,处理一个数据项,输出{type,〈key, value〉},其中type为一个4位的标识符,描述了是否需要迭代,数据是否发送完毕等额外信息。
[0026]CoordinateNodel和ShuffleNode都会收到MapNode的输出,如果输入的数据项中type表示需要迭代,则ShuffleNode会忽略所接收到的数据项。CoordinateNode将会接收数据项并缓存到一个数组中,直到接收到一个特定表示数据发送完毕。当数据接收完毕后,CoordinateNode开始处理数据项数组并输出一个〈key, value)描述处理结果,MapNode接收CoordinateNode的输出,并再次进行处理。
[0027]迭代终止时,MapNode需要在输出的{type,〈key, value〉}的type中设置相应位以表示迭代结束。
[0028]ShuffleNode接收MapNode的输出,同样首先检查type,如果type表示迭代终止,则ShuffleNode开始接收数据项{type,〈key, value〉}并缓存到一个数组中,直到接收到一个数据项,其type表示数据发送完毕。当数据接收完毕后,ShufTleNode首先基于key,对数据项数组中所有的〈key, value)进行排序,然后进行分组,把相同key的〈key, value)放到一个分组中,然后对于每个分组生成〈key, value_list> (value_list为一个value链表),然后输出!type’,〈key, value_list>}。
[0029]ReduceNode 接收到 ShuffleNode 的输出的数据项{type,,〈key, value_list>},然后处理并以〈key’ , value’ >形式输出结果。
[0030]CoordinateNode2 接收 ReduceNode 的输出,和 CoordinateNodel — 样,CoordinateNode2接收数据项并缓存到一个数组中,直到接收到一个特定表示数据发送完毕。当数据接收完毕后,CoordinateNode2开始处理数据项数组并以〈key, value〉形式描述处理结果并输出。
[0031]ReadNode接收CoordinateNode2的输出并向整个框架再次输入需要处理的数据。[0032]本发明提出的MapReduce计算框架下的可迭代式数据处理方法基于流式计算实现可迭代MapReduce计算框架,可保持MapReduce的计算性能不会因为迭代而受到影响。该方法使中间数据不用写回分布式文件系统,也避免java虚拟机的创建和销毁的开销,并可以支持更灵活和更高效的数据分析和处理算法的实现。
[0033]本发明提出的MapReduce计算框架下的可迭代式数据处理方法已通过使用Storm流式计算工具实现,实验效果良好。
[0034]虽然本发明参照当前的较佳实施方式进行了描述,但本领域的技术人员应能理解,上述较佳实施方式仅用来解释和说明本发明的技术方案,而并非用来限定本发明的保护范围,任何在本发明的精神和原则范围之内,所做的任何修饰、等效替换、变形、改进等,均应包含在本发明的权利要求保护范围之内。
【权利要求】
1.一种MapReduce计算框架下的可迭代式数据处理方法,包括以下步骤: S10、ReadNode从Hadoop分布式文件系统中读取原始数据,并将所述原始数据解析成独立数据项,以所述独立数据项作为MapNode的输入数据; S20、MapNode采用Shuffle Grouping机制将所述输入数据分发至MapNode的各线程或进程进行处理,对于每一所述独立数据项输出〈key,value〉格式数据; S30>ShuffleNode对〈key, value)进行哈希重组、基于key值执行排序,并采用FieldsGrouping机制将排序后的〈key, value〉分发至ShuffleNode的各线程或进程; S40、ShuffIeNode的各线程或进程实时将〈key, value〉存入本地KVlist缓冲池,直至收到表示数据发送完毕的〈key, value〉,基于key值对KVlist缓冲池中的〈key, value)进行排序、分组,对每一分组输出{i,〈key,ValUe_liSt>}格式数据,其中,i为当前线程或进程编号; S50、ReduceNode将{i,〈key, value_list>}发送至其第i个线程或进程进行处理,输出〈key,, value,> ; S60、CoordinateNode接收并缓冲〈key’,value’〉直至接收到表示发送完毕的数据项,CoordinateNode将基于〈key’ , value’ >的计算结果返回至ReadNode,ReadNode将所述计算结果解析成独立数据项,重复步骤S20至S50进行迭代,直至ReduceNode发出表示停止迭代的数据项,CoordinateNode退出。
2.根据权利要求1所述的MapReduce计算框架下的可迭代式数据处理方法,其特征在于,在执行步骤S20之后,CoordinateNode接收并缓冲〈key, value)直至接收到表示发送完毕的数据项,CoordinateNode将基于〈key, value〉的计算结果返回至MapNode ,再以该计算结果作为MapNode的输入数据重新执行步骤S20。
3.根据权利要求1所述的MapReduce计算框架下的可迭代式数据处理方法,其特征在于,在执行步骤S40之后,CoordinateNode接收并缓冲{i,〈key, value_list>}直至接收到表示发送完毕的数据项,CoordinateNode将基于{i,〈key, value_list>}的计算结果返回至ShuffleNode,再以该计算结果作为ShuffleNode的输入数据重新执行步骤S30以及S40。
4.根据权利要求1所述的MapReduce计算框架下的可迭代式数据处理方法,其特征在于,MapNode中的线程或进程数量即为Map数量。
5.根据权利要求1所述的MapReduce计算框架下的可迭代式数据处理方法,其特征在于,当MapNode接收到表示所述独立数据项发送完毕的数据项时,则输出表示数据项发送完毕的〈key, value〉。
6.根据权利要求1所述的MapReduce计算框架下的可迭代式数据处理方法,其特征在于,ShuffleNode中的线程或进程数与ReduceNode中的线程或进程数相等。
7.根据权利要求6所述的MapReduce计算框架下的可迭代式数据处理方法,其特征在于,ShuffleNode中每一线程或进程的所有输出均由ReduceNode中一线程或进程接收。
【文档编号】G06F9/455GK103699442SQ201310686716
【公开日】2014年4月2日 申请日期:2013年12月12日 优先权日:2013年12月12日
【发明者】邹瑜斌, 张帆, 须成忠 申请人:深圳先进技术研究院
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1