当前位置: 首页 > 专利查询>北京大学专利>正文

MapReduce计算框架中的高性能排序方法技术

技术编号:10344637 阅读:152 留言:0更新日期:2014-08-21 16:43
本发明专利技术涉及一种MapReduce计算框架中的高性能排序方法。该方法在Map阶段按照partition分别构建缓冲链,移除partition本身进行排序的需要,并且对于每一个partition数据将按照块进行组织,降低了数据在内存中的拷贝以及文件IO方面的代价;在Map阶段不执行排序操作,在Reduce阶段以一个较大的缓冲池作为一次排序的基本单位,使得在排序的归并阶段总的归并路数是一个用户可调优的值。本发明专利技术通过一种混合的内存排序算法,优化了MapReduce框架中排序的两个阶段,基本消除了排序对于计算框架的性能影响,进而提升了计算框架的资源有效性,降低了集群的整体资源消耗。

【技术实现步骤摘要】

本专利技术属于信息
,涉及一种对分布式计算框架的优化方法,特别涉及一种在MapReduce计算框架中提高排序性能的方法。
技术介绍
MapReduce是分布式计算中的一种标准框架,但在资源消耗方面,现有MapReduce框架并不高效,导致大量集群资源被浪费。现有MapReduce框架中需要对中间数据的key/value对进行排序,并且排序构成了现有计算框架中主要的资源消耗。我们以MapReduce的开源实现hadoop为例,说明上述问题。如图1所示,为传统MapReduce数据流程示意图。其中Hadoop文件系统(简称HDFS,Hadoop File System)负责数据的分布式存储。计算框架所执行任务(Job)从HDFS读入数据经过处理后再写入到HDFS。在计算框架内部分为Map和Reduce两个阶段,Map阶段将HDFS上的数据执行用户自定义的Map函数,然后对输出的中间数据首先放入内存,然后排序后写入本地磁盘。在Reduce阶段,每个Reduce接收来自各个Map的排序后的中间数据然后进行归并。框架对同一 key下的所有value调用用户自定义的Reduce函数进行计算后写入到HDFS。具体的数据流程可以参见图1。在如图1所示的原有的数据流程中,排序所需要的工作量3,5,7,8消耗了大部分的框架CPU资源。这种消耗又可以分为内存排序和多路归并两个阶段。1、流程3中对中间数据进行基于内存的二级索引快速排序。排序的过程实际上是对16字节的索引进行排序,索引为一个四元组〈id, partition, key offset, valueoffset〉。当两个这样的四元组进行比较时首先比较两条记录的partition,构成一个partition 升序的序列。只有当 partition—致时再根据〈key offset, value offset〉找到对应的key进行字节比较。大量冗余的partition比较以及O(nlogn)复杂度的代价使得这一部分效率很低。2、流程5,7,8中对内存或磁盘上的有序数据进行多路归并排序。由于在MapReduce计算框架中需要保证内存有限时对数据依旧可以处理,因此基于磁盘的归并排序是框架必不可少的一部分。这一部分的算法实现的复杂度为O(nlogm),其中η为记录数而m为归并路数。由于整体所需要排序的记录数固定,因此这一部分是否高效取决于归并路数,而归并路数在现有实现中其最小值和map的数目相当。对于map数目较大的Job,这部分的代价会高于第一部分的代价并消耗大部分资源。因此,在现有MapReduce计算框架中进行排序的两个阶段因为算法的选择或是处理流程上的不当导致都不高效,而排序操作又对于每一个Job都必不可少,造成了大量的资源浪费。
技术实现思路
本专利技术目的在于提出一种在MapReduce计算框架中进行的高性能排序方法,能够降低框架整体的CPU资源消耗,提高集群整体有效利用率。本专利技术的,其步骤包括:1、Map Task从HDFS上读取文件,构造输入数据的key/value对;2、对输入数据执行用户自定义Map函数并输出中间结果的key/value对,并计算key所对应的partition ;对内存中每个partition设置对应的缓冲链,将中间结果的key/value对首先计算长度,然后插入到缓冲链中;3、当内存无法放下所有中间结果的key/value对时,按照partition的顺序,输出所有缓冲链到本地文件;4、对经过上述步骤后在内存和本地磁盘上形成的一个或多个未排序的结果按照partition的顺序进行归并,输出成一个完整的按照partition进行分段的本地文件;5、Reduce Task通过AppMaster获得Map Task结束的信息,向负责该Map数据托管的进程发送http请求,拖取该Map输出的中间数据中属于该Reduce的部分,将这些数据根据其大小选择放于内存或放于本地磁盘;6、将内存或磁盘中的中间数据读入内存中的排序缓冲池,当排序缓冲池满时,对整个缓冲池进行排序;7、对于中间数据无法全部放在一个排序缓冲池中的情况,在排序后将数据写出到本地文件中。进一步地,上述方法还包括如下步骤:8、对内存和本地文件中的有序结果进行归并,归并结果作为用户自定义Reduce函数的输入;9、Reduce函数对相同key下的所有value执行操作,生成输出数据的key/value对并写入HDFS。进一步地,步骤6)对于大多数作业使用的整形或者字符数组类型的key,抽取key中能够保序的4字节作为低32位,和该条记录本身4字节的二级索引作为高32位进行拼接,形成一个8字节的长整形作为新的key。更进一步地,在这个8字节上使用基数排序,使得其从key中抽取的4字节有序。更进一步地,获取基数排序后的二级索引,再对其进行快速排序保证整体记录的有序性。进一步地,步骤6)对于无法抽取保序4字节的key类型,构建二级索引,使用快速排序进行整体记录的排序。其中,抽取key中4字节的方法是:对于整数即其本身;对于字符数组类型的key为其排序序列的前4个字节,以整数对待,并在最高位取反。其中,基数排序算法为非递归版本,输入为两个长整形的数组,一个用于存放原始数据,一个用于算法的临时空间,算法执行后的结果为长整形数组中低32位整形有序。其中,缓冲池的大小和原有实现(图1所示方法)中的排序缓冲池的大小保持一致,需要用户设定。本专利技术的有益效果如下:1、本专利技术在Map阶段按照partition分别构建缓冲链,移除了 partition本身进行排序的需要,并且对于每一个partition数据将按照块(block)进行组织,降低了数据在内存中的拷贝以及文件IO方面的代价。2、本专利技术在Map阶段不执行排序操作,使得Map阶段的运行时间和CPU资源消耗大幅度下降,进而整体Map阶段的结束时间提前,并且对于大多数作业的整体运行时间得到优化。3、本专利技术在Reduce阶段以一个较大的缓冲池作为一次排序的基本单位(例如128MB),使得在排序的归并阶段总的归并路数是一个用户可调优的值。对于每个reduce处理数据量一定的情况,归并路数为一个非常小的常数值(一般为I?4)。因此归并阶段的算法复杂度和消耗的资源都将减少。4、本专利技术通过一种混合的内存排序算法,能够高效的对内存中变长记录进行排序。基数排序算法复杂度低但不适合变长字段,快速排序适用性广但算法复杂度高。结合MapReduce框架场景需要对大量变长的〈key,value)格式的数据进行排序,本专利技术首先通过低复杂度的基数排序将记录的定长部分进行排序,然后对于少量无序的记录再利用快速排序来保证结果的正确性。两种算法的混合使得既能保证整体的低算法复杂度,又能保证对变长记录的适用性,提高了整体的排序性能。因此,本专利技术优化了 MapReduce框架中排序的两个阶段,使用高效的内存算法并且降低归并路数使得整体的排序性能得到大幅度提升,基本消除了排序对于计算框架的性能影响,进而提升了计算框架的资源有效性,降低了集群的整体资源消耗。【附图说明】图1传统MapReduce计算框架数据流程图。图2本专利技术MapReduce计算框架数据流程图。图3本专利技术本文档来自技高网
...
<a href="http://www.xjishu.com/zhuanli/55/201410145069.html" title="MapReduce计算框架中的高性能排序方法原文来自X技术">MapReduce计算框架中的高性能排序方法</a>

【技术保护点】
一种MapReduce计算框架中的高性能排序方法,其步骤包括:1)Map Task从HDFS上读取文件,构造输入数据的key/value对;2)对输入数据执行用户自定义Map函数并输出中间结果的key/value对,并计算key所对应的partition;对内存中每个partition设置对应的缓冲链,将中间结果的key/value对首先计算长度,然后插入到缓冲链中;3)当内存无法放下所有中间结果的key/value对时,按照partition的顺序,输出所有缓冲链到本地文件;4)对经过上述步骤后在内存和本地磁盘上形成的一个或多个未排序的结果按照partition的顺序进行归并,输出成一个完整的按照partition进行分段的本地文件;5)Reduce Task通过AppMaster获得Map Task结束的信息,向负责该Map数据托管的进程发送http请求,拖取该Map输出的中间数据中属于该Reduce的部分,将这些数据根据其大小选择放于内存或放于本地磁盘;6)将内存或磁盘中的中间数据读入内存中的排序缓冲池,当排序缓冲池满时,对整个缓冲池进行排序;7)对于中间数据无法全部放在一个排序缓冲池中的情况,在排序后将数据写出到本地文件中。...

【技术特征摘要】
1.一种MapReduce计算框架中的高性能排序方法,其步骤包括: 1)Map Task从HDFS上读取文件,构造输入数据的key/value对; 2)对输入数据执行用户自定义Map函数并输出中间结果的key/value对,并计算key所对应的partition ;对内存中每个partition设置对应的缓冲链,将中间结果的key/value对首先计算长度,然后插入到缓冲链中; 3)当内存无法放下所有中间结果的key/value对时,按照partition的顺序,输出所有缓冲链到本地文件; 4)对经过上述步骤后在内存和本地磁盘上形成的一个或多个未排序的结果按照partition的顺序进行归并,输出成一个完整的按照partition进行分段的本地文件; 5)Reduce Task通过AppMaster获得Map Task结束的信息,向负责该Map数据托管的进程发送http请求,拖取该Map输出的中间数据中属于该Reduce的部分,将这些数据根据其大小选择放于内存或放于本地磁盘; 6)将内存或磁盘中的中间数据读入内存中的排序缓冲池,当排序缓冲池满时,对整个缓冲池进行排序; 7)对于中间数据无法全部放在一个排序缓冲池中的情况,在排序后将数据写出到本地文件中。2.如权利要求1所述的方法,其特征在于,还包括如下步骤: 8)对内存和本地文件中的有序结果进行归并,归并结果作为用户自定义Reduce函数的输入...

【专利技术属性】
技术研发人员:蒋达晟陈薇王腾蛟
申请(专利权)人:北京大学
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1