Spark任务执行优化技术研究
发布时间:2021-02-17 10:23
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数据均衡分...
【文章来源】:东南大学江苏省 211工程院校 985工程院校 教育部直属院校
【文章页数】:79 页
【学位级别】:硕士
【部分图文】:
HadoopMapReduce执行架构
第1章引言3起的过程称为Shuffle。在Shuffle过程中,MapTask输出中间数据并将其写到缓冲区中,每当缓冲区中的数据量达到阈值时,缓冲区中的数据会溢写到本地磁盘中并形成一个临时的Spill文件。因此在MapTask执行结束后,可能会存在多个Spill文件。为了减少最终生成的临时文件数目,在MapTask完成前,所有的Spill文件将会被归并排序成一个数据文件。在MapTask输出中间数据后,ReduceTask会通过网络来拉取对应的数据并进行后续的计算。在Spark中,宽依赖会引发Shuffle操作,该操作会被划分成ShuffleWrite和ShuffleRead两个阶段并分别在两个Stage中顺序执行。其中,ShuffleWrite阶段输出中间数据并根据当前所采用的数据分区器对中间数据进行分区;ShuffleRead阶段负责启动ShuffleReadTask来拉取已分区的中间数据并生成相应的Partition,图1-3描述了SparkShuffle操作的基本架构。由于Shuffle过程涉及到大量的磁盘读写操作以及网络传输操作,因此Shuffle操作的性能高低直接影响基于MapReduce计算框架的性能和吞吐量。图1-4描述了在20GB输入数据下,图1-2对应的SparkJob在执行时各个算子的执行时间以及处理的数据量,其中算子groupByKey和join会带来Shuffle操作,实验结果表明,Shuffle操作无疑是影响Spark执行性能的关键因素。MapTaskbucketbucketbucketMapTaskbucketbucketbucketMapTaskbucketbucketbucketShuffleReadPartitionPartitionPartition………ShuffleWriteReducerReducerReducer…图1-3SparkShuffle基本架构
eadPartition放置算法SPOC。该算法采用两阶段优化的方式获取一种适宜的Partition放置策略,进而实现ShuffleRead阶段中计算节点负载均衡,进一步提高了Spark计算系统的执行效率。最后,将本文的研究成果集成到现有的Spark计算系统中并进行相关的性能测试和分析。系统测试和分析(第5章)3系统实现部分SparkShuffle任务执行优化Spark均衡数据分区器的设计与实现(第3章)基于代价的ShuffleReadPartition放置算法设计(第4章)理论研究部分SparkShuffleWrite优化SparkShuffleRead优化12系统集成验证图1-7研究内容交互关系图(1)Spark均衡数据分区器研究深入分析了ShuffleWrite阶段的数据分区特性,建立了SparkShuffle中间数据均衡分区模型。通过将Shuffle中间数据均衡分区问题转换为经典的List-Scheduling问题,提出一种Shuffle中间数据均衡分区算法。最后,设计并实现一种Spark均衡数据分区器BSPartitioner,有效地实现了Shuffle中间数据的均衡分区。(2)研究基于代价的SparkShufflePartition放置算法分析ShuffleRead阶段中的Partition放置方式,将Partition放置问题转化为计算节点负载均衡问题,建立了ShuffleRead阶段计算节点负载均衡模型。基于启发式方法,提出了一种
本文编号:3037848
【文章来源】:东南大学江苏省 211工程院校 985工程院校 教育部直属院校
【文章页数】:79 页
【学位级别】:硕士
【部分图文】:
HadoopMapReduce执行架构
第1章引言3起的过程称为Shuffle。在Shuffle过程中,MapTask输出中间数据并将其写到缓冲区中,每当缓冲区中的数据量达到阈值时,缓冲区中的数据会溢写到本地磁盘中并形成一个临时的Spill文件。因此在MapTask执行结束后,可能会存在多个Spill文件。为了减少最终生成的临时文件数目,在MapTask完成前,所有的Spill文件将会被归并排序成一个数据文件。在MapTask输出中间数据后,ReduceTask会通过网络来拉取对应的数据并进行后续的计算。在Spark中,宽依赖会引发Shuffle操作,该操作会被划分成ShuffleWrite和ShuffleRead两个阶段并分别在两个Stage中顺序执行。其中,ShuffleWrite阶段输出中间数据并根据当前所采用的数据分区器对中间数据进行分区;ShuffleRead阶段负责启动ShuffleReadTask来拉取已分区的中间数据并生成相应的Partition,图1-3描述了SparkShuffle操作的基本架构。由于Shuffle过程涉及到大量的磁盘读写操作以及网络传输操作,因此Shuffle操作的性能高低直接影响基于MapReduce计算框架的性能和吞吐量。图1-4描述了在20GB输入数据下,图1-2对应的SparkJob在执行时各个算子的执行时间以及处理的数据量,其中算子groupByKey和join会带来Shuffle操作,实验结果表明,Shuffle操作无疑是影响Spark执行性能的关键因素。MapTaskbucketbucketbucketMapTaskbucketbucketbucketMapTaskbucketbucketbucketShuffleReadPartitionPartitionPartition………ShuffleWriteReducerReducerReducer…图1-3SparkShuffle基本架构
eadPartition放置算法SPOC。该算法采用两阶段优化的方式获取一种适宜的Partition放置策略,进而实现ShuffleRead阶段中计算节点负载均衡,进一步提高了Spark计算系统的执行效率。最后,将本文的研究成果集成到现有的Spark计算系统中并进行相关的性能测试和分析。系统测试和分析(第5章)3系统实现部分SparkShuffle任务执行优化Spark均衡数据分区器的设计与实现(第3章)基于代价的ShuffleReadPartition放置算法设计(第4章)理论研究部分SparkShuffleWrite优化SparkShuffleRead优化12系统集成验证图1-7研究内容交互关系图(1)Spark均衡数据分区器研究深入分析了ShuffleWrite阶段的数据分区特性,建立了SparkShuffle中间数据均衡分区模型。通过将Shuffle中间数据均衡分区问题转换为经典的List-Scheduling问题,提出一种Shuffle中间数据均衡分区算法。最后,设计并实现一种Spark均衡数据分区器BSPartitioner,有效地实现了Shuffle中间数据的均衡分区。(2)研究基于代价的SparkShufflePartition放置算法分析ShuffleRead阶段中的Partition放置方式,将Partition放置问题转化为计算节点负载均衡问题,建立了ShuffleRead阶段计算节点负载均衡模型。基于启发式方法,提出了一种
本文编号:3037848
本文链接:https://www.wllwen.com/kejilunwen/ruanjiangongchenglunwen/3037848.html