论文部分内容阅读
在大数据飞速发展的时代,传统的数据存储和计算能力已经无法满足大众的需求,因此Spark现已成为当前分布式计算框架的典型代表。然而随着Spark的发展,集群规模迅速扩大,如何合理地利用集群资源成为了当前研究的热门话题。Shuffle是介于Map和Reduce之间的重要阶段,因此Shuffle阶段的性能优劣会直接影响整个系统的运行效率。本文从Spark Shuffle过程的Task任务调度和内存分配两个方面,对Spark平台进行研究和改进。本文研究工作分为两部分,即提出基于权重优先的Task任务调度策略以及优化的空闲内存二次分配算法。具体完成了以下工作:1.对于Task任务使用默认调度策略而导致在Worker节点上负载不均衡的问题,本文提出了一种基于权重优先的Task任务调度策略。首先将Task按照资源需求量和读取速度分类;并实时监测各个Worker节点的情况,通过将CPU利用率、内存利用率以及单个Worker节点上Task任务的负载长度作为指标,计算各个Worker节点的计算能力的权重;然后将Task与Worker节点以映射的方式进行调度。通过实验结果表明,本文提出的基于权重优先的Task任务调度策略能够提高系统性能,运行时间上比现有改进算法节约7.21%。2.针对Spark Shuffle过程中对内存进行公平分配的算法导致集群资源利用率降低的问题,本文提出了一种优化的空闲内存分配算法。通过将Task任务按照资源需求量的大小分为两类;并选择内存需求量大的Task任务,在首次分配内存时,为其添加一个防止内存溢出块;并将Task任务运行过程中,空闲的内存以及未被使用的内存空间用于对有溢出情况的Task任务进行二次分配。通过实验可以看出,本文提出的优化的空闲空间二次分配算法能够更好的降低内存溢出和内存的浪费情况。不均匀数据下在时间上比现有的改进算法节约6.6%,内存溢出量比现有的改进算法低10.8%。