一种实现作业内的MapReduce数据本地化的方法

文档序号:9200268阅读:679来源:国知局
一种实现作业内的MapReduce数据本地化的方法
【技术领域】
[0001]本发明属于计算机技术领域,具体涉及一种实现作业内的MapReduce数据本地化的优化方法。
【背景技术】
[0002]随着分布式计算模型的发展,在MapReduce分布式计算模型之后,涌现出了很多其他的分布式计算模型,例如Spark和Storm。这些模型在数据处理方面各有侧重,所以在大型互联网公司,这些分布式模型都是同时搭载在一个物理集群上的。各个分布式计算模型虽然都可以做到互相隔离,但是整个物理集群的网络带宽资源都是公用的,所以提升MapReduce计算模型的网络带宽消耗,减少MapReduce计算模型的网络带宽消耗量,不仅对同一物理集群的其他计算模型有利,而且与此同时可以提升MapReduce计算模型中作业的执行效率。
[0003]MapReduce集群的网络带宽消耗的主要由如下几种情况构成:
[0004]1.用户从本地上传数据到HDFS上造成的网络带宽消耗;
[0005]2.Shuffle阶段将Map阶段的输出传输到Reduce阶段造成的网络带宽消耗;
[0006]3.Reduce阶段将处理结果存储到HDFS所造成的网络带宽消耗;
[0007]4.非本地化的任务造成的网络带宽消耗。
[0008]上述情况1、2、3下造成的网络带宽消耗是不可避免的,其中情况2的带宽消耗可以通过在Map阶段设置Combiner ( —种在Map端的同Reducer作用类似的函数)和压缩Map阶段的最终输出数据等措施来缓解。情况4的网络带宽消耗主要是由于非本地化任务需要通过网络远程拷贝数据到本地作处理,这种情况造成的网络带宽消耗可以通过优化调度算法来提高数据本地化任务的比率,从而避免不必要的带宽消耗。另外,通过实验发现,大部分非本地化任务都是在Shuffle阶段开始后才出现的,而这时候出现的非本地化任务将同Shuffle阶段竞争网络带宽资源,从而拖延作业自身的执行进度。
[0009]针对提升Map阶段的数据本地化程度的调度策略非常多,但都存在一些实用性不高,适用范围不广等问题。Zaharia等提出一种延迟调度的算法能有效提升数据本地化程度(“Delay scheduling:a simple technique for achieving locality andfairness in cluster scheduling,,,in Proceedings of the 5th European conferenceon Computer systems.ACM, 2010, pp.265 - 278.),但这种延迟调度的方法是建立在损失局部作业的执行效率的基础上的,并且这种调度算法适用性不广,当只有一个或几个作业在运行时,并不能取得最优的数据本地化程度和作业整体执行时间。Xie等提出一种根据计算节点性能来提前分布数据的方法(“Improving mapreduce performance throughdata placement in heterogeneous hadoop clusters,,,in Parallel&DistributedProcessing, Workshops and Phd Forum(IPDPSff), 2010 IEEE Internat1nal Symposiumon.1EEE, 2010, pp.1 _ 9.),这种方法需要预先测量各计算节点的性能,在可以通过调整参数而动态设置计算节点计算资源的MapReduce平台下,这种方法实用性不高。

【发明内容】

[0010]本发明侧重提升MapReduce任务数据本地化程度,具体实施手段是通过改变作业内的任务调度算法,使得该作业的任务数据本地化程度能够得到进一步提升。本发明提出的调度策略可以同时工作在同构和异构集群环境。针对某一指定作业,该调度策略在调度一个计算任务(Task)给一个计算节点(TaskTracker)的时候,通过综合考虑计算节点的关于该作业的剩余本地化数据块(Block)数目和通过一系列处理计算得来的关于该计算节点的未来预计需要处理的任务数目来进行不同任务的分配。
[0011]—种实现作业内的MapReduce数据本地化的方法,其流程如图1所示,在拥有η个物理计算节点的集群上,针对得到调度的具体作业Α,在其实施过程中按以下方法实现本地化:
[0012]步骤1:由于集群有同构和异构之分,在计算尚未开始时假设集群是同构的,即假设所有物理计算节点的计算性能Pi均为1,其中ie [I, η];对于作业Α,假设该作业对应的数据块个数为b个,且每个数据块在HDFS上的默认备份数为3,设各计算节点上的数据块个数为FTi,则总数据块数量Σ Fli= 3b ;
[0013]以各计算节点的关于作业A的本地化数据块数量为参量建立小顶堆并进行作业A的第一轮任务分配,即为每个物理计算节点分配一个数据块;第一轮任务分配过程中,首先对位于小顶堆堆顶对应的计算节点分配任务,分配完成后,对剩余的尚未分配的各计算节点按上述方法重新构建小顶堆,并对新的小顶堆堆顶对应的计算节点分配任务,按上述方法进行重复操作直至所有物理计算节点均分配到第一个计算任务;每个计算节点处理其分配到的第一个计算任务,并计算每个物理计算节点处理各自申请的第一个计算任务所需要的时间,由此得到每个物理计算节点的实际计算性能RPTi,其中i = 1,…,n ;
[0014]步骤2:计算各物理计算节点针对作业A还需要处理的任务个数PBTi,计算方法如下:
[0015]作业A的第一轮任务分配及计算完成后,对于作业A剩余的m = b_n个数据块,每个物理计算节点应处理的数据块数量CBTi= m.;通常情况下CBTi为非整数,对08?向下取整得整数DCBTi,即CBTi= DCBTi+Si,0 ( S^l,则有m = (DCB11+-+DCBTn)+S,其中S = S1+…+Sn为各计算节点取整后剩余小数累加的和得到的整数未分配数据块数量;
[0016]设A为集群中计算性能最高与最低的物理计算节点之间的实际计算性能值之比,对Qr向上取整得整数Q,即Q〈Qr+l,计算每个物理计算节点分别再处理Di+Ι,…,Di+Q个数据块所需要的时间加上该计算节点处理完正在处理的任务的剩余时间的和tM,
由此得到nXQ个时间数据t1;1,..., t1;Q,…,ti;1,..., ti;Q,..., tn;1,…,tn,Q,按由小到大顺序对所述nXQ个时间数据进行排列并构成一个映射列表,列表中的每一个时间均映射一个其相应的物理计算节点;
[0017]选取映射列表中前S个时间所映射的S个物理计算节点,统计整个计算集群中第i个物理计算节点在这S个物理计算节点中出现的次数Li;
[0018]针对第i个物理计算节点,经过计算最终需要处理的数据块个数为PBTi =(DCB1^Li)个,且 m= (PBT1+...+PBTn);
[0019]步骤三:统计各计算节点当前剩余未分配的本地化数据块数量LTi,并将各数据块当前的标记值设为O ;
[0020]步骤四:计算各计算节点数据块饱和度SATi,其中SATi= LTi/PBTi,St代表各计算节点上剩余的本地化数据块数量相对根据性能计算的数据块数量,SAt值越大,表明该计算节点存在非本地化的可能性越小;相反,如果SAt值
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1