论文部分内容阅读
Spark作为一种基于内存的分布式计算框架,已经广泛应用于大数据处理系统中。它延续了Hadoop MapReduce的计算模型,但是其采用了基于内存的弹性分布式数据集RDD来进行数据处理,有效地避免了Hadoop MapReduce计算过程中的大量磁盘I/O操作,提高了系统执行性能。然而目前的Spark在Shuffle过程中仍然存在着不足:(1)Shuffle Write阶段中的分区倾斜问题;(2)Shuffle Read阶段中的计算节点负载不均衡问题。本文针对目前Spark计算系统中存在的不足,对Spark Shuffle过程中的任务执行优化技术进行研究。首先,针对Shuffle Write阶段中的分区倾斜问题,本文提出了一种Spark均衡数据分区器BSPartitioner(Balanced Spark Partitioner)。通过深入分析Shuffle Write阶段的中间数据分区特性,建立了Spark Shuffle中间数据均衡分区模型,该模型以最小化分区倾斜度为目标,寻找一种Shuffle中间数据均衡分区策略。基于该模型,本文设计并实现了BSPartitioner数据均衡分区算法,该算法通过将Shuffle中间数据均衡分区问题转换为经典的List-Scheduling任务调度问题,有效地实现了Shuffle中间数据的均衡分区,提高了Spark计算系统的执行性能。其次,针对Shuffle Read阶段中的计算节点负载不均衡问题,本文提出了一种基于代价的Shuffle Read Partition放置算法SPOC(Spark Shuffle Partition Placement Based on Cost)。通过将Shuffle Read阶段的Partition放置问题转换为计算节点负载均衡问题,建立了计算节点负载均衡模型,该模型以最小化计算节点间的最大工作负载为目标,寻找一种实现计算节点负载均衡的Partition放置策略。基于该模型,SPOC算法采用两阶段优化的方式获取一种适宜的Partition放置策略,从而保证Shuffle Read阶段中计算节点负载均衡,进一步提高了Spark计算系统的执行性能。最后,基于本文的研究工作对Spark开源计算系统进行了二次开发,搭建了Spark计算集群并使用基准测试工具TPC-D生成不同数据倾斜度和数据量的测试数据进行实验分析,多组实验验证了本文研究工作的可行性和有效性。