论文部分内容阅读
随着“大数据”时代的到来,分布式数据处理平台受到越来越广泛的关注,其中Google提出的MapReduce编程模型成为了以数据为中心的大规模数据处理平台的主流实现。在MapReduce编程模型的Shuffle过程中,Map和Reduce之间的中间数据是通过Pull的方式传输,只有当有Map task完成时,Reduce task才能传输数据,当:Map task全部完成时,Reduce task获取所有数据后才能开始计算。因此Reduce task的执行依赖于Map task的状态。这种Reduce对Map的依赖造成Map和Reduce阶段间的耦合关系,会引发Reduce Slot Hoarding和网络负载不均衡的问题,影响资源使用率和作业执行效率,导致作业Wall Time延长,降低系统吞吐率。
改进MapReduce编程模型中Shuffle过程的相关工作有很多,如Pipeline技术、Copy-compute Splitting技术等,但是这些方案都是只能缓解或解决部分问题,不能从根本上同时解决这两个问题。基于大规模数据处理的重要性以及目前MapReduce编程模型中耦合关系带来的问题和现有解决方案的不完善性,本文提出对MapReduce编程模型进行去耦合优化研究,构建一个无耦合的中间数据传输模型来替代原有Shuffle过程,解决Reduce Slot Hoarding和网络负载不均衡的问题。对MapReduce编程模型进行去耦合优化有两个必要条件:在作业的所有Map task完成之前,不得调度Reduce task;在作业Map阶段完成中间数据传输,将网络负载分散到Map和Reduce两个阶段,均衡网络负载。为了达到这两个目标,本文提出三项关键技术:(1)权重映射技术,建立Reduce task和节点间的映射关系,在Reduce task启动前确定其执行的节点;(2)数据自推送技术,在各个节点上创建Server。Map task完成数据处理后以自己为Client,采用Push的方式将中间数据推送到Reduce task映射节点的Server上,Server负责接受、存储和管理中间数据;(3)部分数据备份技术,通过备份部分数据来保证MapReduce编程模型的容错性。本文基于这三项关键技术来构建无耦合中间数据传输模型,并将模型分成三个组成模块,控制模块、数据传输模块和容错模块。其中控制模块负责任务映射、任务调度以及各个模块间的协同工作。数据传输模块负责中间数据的传输、存储和管理。容错模块负责在节点异常时自动进行出错恢复,以最小代价完成作业恢复工作。
本文将无耦合中间数据传输模型应用到开源的MapReduce框架Hadoop上,并对无耦合中间数据传输模型进行功能和性能测试。测试表明无耦合中间数据传输模型成功解决Reduce Slot Hoarding和网络负载不均衡的问题,达到去耦合优化的目标。并且提高系统吞吐率33.10%,系统的加权加速比达到48.56%。