论文部分内容阅读
大数据平台Spark近年间已逐渐成为业界热点,其基于内存计算的特性在机器学习和神经网络等迭代式应用场景中可以提供非常快的任务运行速度,现已被应用于百度、美团、腾讯和阿里巴巴等公司的业务中。最大的Spark集群拥有数千节点和TB级内存,支持处理的数据量级高达PB级,然而集群节点之间因为地域差异、配置更新和集群扩展等原因往往存在较高的异构性,如何更好的利用集群中的资源来提高平台性能现已成为当前研究的热门方向。本文针对Spark运行过程中的任务调度与缓存替换两个方面,对其性能优化技术进行深入的研究与改进,主要工作分为两部分,即提出基于改进量子蚁群算法的任务调度机制和提出基于RDD权重和双队列的缓存替换与预加载机制。下面将详细介绍上述两部分的研究工作:1.提出一种基于改进量子蚁群算法的任务调度机制。针对Spark默认任务调度机制导致高性能节点的硬件优势无法被充分利用,从而造成任务分配不均和内存频繁溢出的问题,首先,综合考虑节点的硬件能力、当前状态和网络传输速度,结合内存溢出现象对任务完成时间造成的影响,从而设计一种异构集群中的任务完成时间度量方法。然后在量子蚁群算法的基础上进行改进,通过最大最小量子信息素更新原则来控制量子信息素概率幅的范围以增大搜索空间,结合动态灾变策略避免量子蚁群算法的寻优过程陷入停滞,并采用异构集群中的任务完成时间度量方法衡量个体的适应度,提出一种基于改进量子蚁群算法的任务调度机制。仿真实验结果表明,本文提出的基于改进量子蚁群算法的任务调度机制能够有效提高Spark性能,在任务完成时间上较现有改进算法节约10.9%,并同时减少17.9%的内存溢出次数。2.提出一种基于RDD权重和双队列的缓存替换与预加载机制。针对Spark默认缓存替换机制在内存不足时将重要的RDD驱逐出内存,导致其复用时造成巨大重计算开销的问题,首先在综合考虑RDD自身属性的基础上,加入了对复用时刻集群负载状态的分类作为影响RDD重要性的因素,设计一种基于负载预测的RDD权重模型(Load Prediction based Weight,LPW),从而更全面的衡量RDD权重。然后在LPW模型的基础上结合双队列的思想,提出一种基于RDD权重和双队列的缓存替换与预加载机制(Weight and Dual Queues based Cache Replacement and Preload,WDQCRP),其中包括最小代价替换算法和最大权重预加载算法。最小代价替换算法可以在内存空间不足时根据RDD的生成时间与所在节点的磁盘性能来决定内存中替换出的RDD是否缓存到磁盘,同时最大权重预加载算法可以在内存空间充足时自动将磁盘中的RDD加载到内存中,从而避免复用时再从磁盘读取的等待时间。仿真实验结果表明,本文提出的WDQCRP机制能够有效地提高平台性能,在任务运行时间上较现有改进算法节约8.02%,同时提升9.59%的RDD访问命中率。