内核源码分析——shuffle
中华石衫版本
---------------------------------------------------------------------
1——每个shuffleMapTask都会为每个ResultTask创建一份bucket缓存,以及对应的shuffleBlockFile磁盘文件;
2——shuffleMapTask的输出,会作为MapStatus,发送到DAGScheduler的MapOutputTrackerMaster,MapStatus包含了每个ResultTask要拉取数据的大小;
3——每个ResultTask会用BlockStoreShuffleFecher去MapOutputTrackerMaster获取自己要拉取的文件的信息,然后底层通过BlockManager将数据拉取过来;
4——每个ResultTask拉取过来的数据,其实就会组成一个内部的RDD,将shuffledRDD,优先放入内存,如果不够再写入磁盘;
5——然后每个ResultTask针对数据进行聚合,最后生成MapPartitionsRDD,就是我们进行reduceByKey等操作希望获得的那个RDD;
6——新版本中,引入了consolidation机器,提出了shuffleGroup概念。可以将shuffleMapTask追加到之前的写入中,相当于对多个shuffleMapTask的输出进行了合并,从而减少了
本地文件的数量;