第34课:彻底解密Spark 2.1.X中Shuffle 中SortShuffleWriter排序源码内幕解密
本文根据家林大神系列课程编写 http://weibo.com/ilovepains
Spark Shuffle一个至关重要的内容,我们的SortShuffle内部到底怎么排序的?这里的排序是从整个框架的角度讲,SortShuffle在不考虑业务排序的情况下是怎么进行排序的?SortShuffle最原始的排序是按照Partition进行排序的。
SortShuffle的排序我们主要是看它的Write方法,因为只有进行输出的时候才涉及到排序。涉及排序中非常关键的一行代码。
1. val partitionLengths =sorter.writePartitionedFile(blockId, tmp)
writePartitionedFile的基本工作机制是ExternalSorter在进行排序的时候可能一部分数据在内存中,一部分数据在磁盘上,在磁盘上的数据可能是一个,也可能是若干个,假设磁盘上有很多小文件,那会将小文件Merge成一个大的文件。
1,数组lengths:跟踪输出文件中每个范围的位置
2,通过blockManager获得一个writer,blockManager管理了内存和磁盘的读写。
3,进行判断s