总结:
每个Task会先把数据发送到缓冲区中,缓冲区满了会排序溢写到临时文件,等到Task计算完成之后,会把这些临时文件合并成一个大文件,和一个index文件,文件内容是有序的,等到所有的Task计算完成之后,启动ReduceTask,拉取属于自己分区的数据进行计算。
SortShuffle:减少了小文件。
中间落盘应该是本地磁盘
生成的文件数 = Task数量*2
在溢写磁盘前,先根据key进行排序,排序过后的数据,会分批写入到磁盘文件中。默认批次为10000条,数据会以每批一万条写入到磁盘文件。写入磁盘文件通过缓冲区溢写的方式,每次溢写都会产生一个磁盘文件,也就是说一个Task过程会产生多个临时文件。最后在每个Task中,将所有的临时文件合并,这就是merge过程,此过程将所有临时文件读取出来,一次写入到最终文件。
bypassShuffle:减少了小文件,不排序,效率高。在不需要排序的场景使用。