论文部分内容阅读
近年来,随着数据量和计算能力的增长,越来越多的数据处理任务使用集群来完成。为了进一步提高编程的灵活性和作业执行的效率,在MapReduce的基础上出现了Pig、Hive等各种不同类型的作业,以及基于内存计算的Spark作业。用户只需要将各类作业提交给通用资源管理框架YARN(Yet Another Resource Negotiator),然后由YARN进行统一的管理与调度。然而在现实应用中,复杂的数据处理任务往往需要将多个作业甚至不同类型的作业组合起来,不同类型的作业具有不同的执行特征,而且某些作业还具有重复性执行的特点。在作业的执行过程中,随着资源的分配与回收,集群中的可用资源会发生动态的变化,作业之间相互竞争资源的情况对作业的执行效率和调度目标的实现具有显著的影响。如果仅仅只将作业提交给YARN而不考虑作业本身的特征和集群的各种软硬件资源的使用情况,则很有可能因系统资源过载而使得作业挂起或执行失败,从而导致资源的浪费,也无法对作业模型的执行过程进行更细粒度的管理和控制。本文首先定义了调度系统中涉及的作业模型和资源模型的特征参数,并基于此提出了混合模型。针对混合模型的调度参数采集和预处理,提出了一种基于深度学习的缺失数据补全方法。然后,在工作流管理技术基础上,根据作业所处理的数据量、作业本身的特征以及采集的集群资源特征对作业的可调度性、执行时间进行预测,并根据预测结果进行调度,从而降低作业执行失败率并提高作业的执行效率。对于单个的作业而言,通过工作流管理系统收集作业执行时间和执行结果状态,并结合作业执行过程中采集的集群资源监控指标数据,形成作业的历史执行信息。然后根据作业的历史执行信息使用SVM(支持向量机)预测下一个作业的资源可用情况,并以此判断作业的可调度性。对于由不同类型的作业组合而成的DAG(Directed Acyclic Graph)作业模型而言,根据作业的预计执行时间分析作业模型的关键路径。在模型执行过程中,根据模型的执行情况和资源变化情况采用工作流管理技术动态地挂起或者恢复作业,控制作业的执行流程。在关键路径的基础上,提出了调度判别函数,并基于判别函数动态改变作业的执行路径,从而提高整个作业模型的执行效率。最后,本文设计了若干作业模型样本,搭建集群实验环境,根据预测结果对调度算法的有效性进行验证,并分析了各种参数设置下的实验的结果。实验结果表明本文提出的调度算法以及基于该算法的调度系统具有良好的效果,达到了系统预期的设计目标。