第25课: Spark Hash Shuffle源码解读与剖析
Spark 2.1x 现在的版本已经没有Hash Shuffle的方式,那为什么我们还要讲解HashShuffle源码的内容呢?原因有3点:1,在现在的实际生产环境下,很多人在用Spark1.5.x,实际在使用Hash Shuffle的方式。2,Hash Shuffle的方式是后续Sort Shuffle的基础。3,在实际生产环境下,如果不需要排序,数据规模不是那么大,HashShuffle的方式是性能比较好的一种方式,SparkShuffle是可以插拔的,我们可以进行配置。
本节我们基于 Spark 1.5.2版本讲解Hash Shuffle;Spark 1.6.3是Spark 1.6.0中的一个版本,如果在生产环境中使用Spark 1.x,最终都会转向Spark 1.6.3,Spark 1.6.3是1.x版本中最后一个版本,也是最稳定最强大的一个版本;Spark 2.1.0是Spark最新版本。可以在生产环境中实验。
Shuffle 的过程是Mapper和Reducer以及网络传输构成的,Mapper端会把自己的数据写入本地磁盘,Reducer 端会通过网络把数据抓取过来。Mapper 会先把数据缓存在内存中,在默应情况下缓存空间是 32K,数据从内存到本地磁盘的一个过程就是写数据的一个过程。
这里有两Stage,上一个Stage 叫ShuffleMapTask,下面的一个Stage 可能是ShuffleMapTask,也有可能是 ResultsTask,取决于它这个任务是不是最后一个Stage所产生的。ShuffleMapTask会把我们处理的RDD的数据分成若干个 Bucket,即一个又一个的 Buf