论文部分内容阅读
MapReduce是目前最流行的云计算框架,其调度优化问题一直是云计算领域的重要研究问题。MapReduce调度优化的主要目标是,提高MapReduce作业的运行效率。针对这一目标,本文研究了面向MapReduce的数据分配、Map任务调度、非精确应用加速和串行程序的并行执行等四个问题。MapReduce原模型中,数据分配只考虑Map任务的负载均衡和数据本地化需求。然而,数据分配既会影响Map任务的运行效率,也会影响Shuffle的数据传输时间。针对Map任务运行和Shuffle数据传输的高效性问题,本文提出了一种面向MapReduce计算过程的最优数据分配方法OPTAS,以获得最短的Map+Shuffle的运行时间。其基本思路是:(1)利用作业数据分配方案(Data Placement Instance,DPI)的Map时间值的离散化特征,将所有数据分配方案划分成若干个DPI子空间,通过比较子空间最优DPI来获得最优数据分配方案,提高搜索效率;(2)基于子空间的Map时间值,确定子空间最优DPI的Shuffle时间下界,以快速构造子空间最优数据分配方案;(3)按照Map时间值的大小顺序构造子空间最优DPI,找出的最先具有作业时间极小值的子空间最优DPI就是最优数据分配方案,该方法有效减少了需构造和比较的子空间最优DPI的数量,提高最优数据分配方案的搜索速度。实验结果表明,OPTAS可以快速搜索出最优数据分配方案,优化MapReduce作业时间。MapReduce目前的任务调度主要是依据计算节点的忙闲状态,其调度方法存在两个问题:(1)任务队列的尾部任务会被分配给能力较弱的节点,引起“长尾”现象;(2)调度次数多、开销大。针对该问题,本文提出了一种基于节点性能的最优任务调度方法,能有效提高作业执行效率和降低调度开销。其基本思路是:(1)以已知计算节点的性能为基础,求解以最优调度为目标的计算方程,获得最优调度方案的理论值;(2)当该理论值出现非整数值时,将理论值对应的任务分两步进行调度,即整数值对应的任务直接调度,小数值对应的调度任务统一按节点的任务执行时间的快慢依次分配,依然得到最优分配方案;(3)为求解节点性能,设计一种基于任务运行的节点性能自评估方法,能获得任务执行次数越多,性能评估越准确的效果;(4)为减少任务的调度次数,设计一种基于任务完成事件的批次调度方法,能达到在节点性能评估不十分精确的情况下的最优任务调度和调度次数最少的目标。实验结果表明,该方法能有效解决任务调度中存在的两个问题。非精确应用具有只基于部分数据即可产生最终结果的特点,但目前MapReduce必须计算完所有数据才能给出最终结果。针对在MapReduce中提高非精确应用计算效率这一目标,本文提出了MapCheckReduce计算模型,并设计了它的运行支撑环境。其基本思路是:(1)在MapReduce计算过程中增加条件判断环节,根据Map任务的完成情况判断是否取消余下Map任务;(2)为支持Map任务运行时的条件判断,提供一种Check机制,不仅能接收并分析Map任务信息,而且能根据分析结果向任务调度器发出“停止余下Map任务运行”的指令;(3)任务调度器除了具有任务调度能力外,还具有中止所有剩余Map任务的能力;(4)提供一组MapCheckReduce编程接口,用户可以自定义Map过程的中止条件。MapCheckReduce原型已基于Hadoop MapReduce实现。实验结果验证了MapCheckReduce的可行性和有效性。现有串行程序的并行化是数据量不断增大情况下的迫切需求,传统的程序并行化过程需要应用人员与并行程序编写人员共同重新编程。针对串行程序面对所处理数据量增大的并行化执行要求,本文提出了一种基于可执行程序的并行计算框架MEX,通过在框架中建立分布式存储、任务调度和同步控制等机制,达到将原串行程序运行于多计算节点上并行执行的目的。其基本思路是:(1)数据在多个节点上分布存储;(2)原串行程序部署到多个节点并行执行,通过统一调度的方式对任务进行管理;(3)设计一种基于数据预取的数据本地化机制,支持任务高效运行,支持透明访问异地数据,保持计算资源使用中的动态平衡;(4)设计一种基于同步控制的进程监控机制,通过监测可执行程序的执行状态,对出现异常或失败的任务进行容错处理。MEX原型已经基于Hadoop MapReduce实现,实验结果验证了MEX的可行性和有效性。