在该模式下,数据会写入一个数据结构,reduceByKey写入map,一边通过map局部聚合,一边写入内存。达到一定阈值会将内存数据写入磁盘,清空内存结构。在溢写磁盘之前会根据key进行排序,排序后会分批写入磁盘中。一个task会产生多个临时文件,最后再每个task中将所有的临时文件进行合并,也就是一个task的所有数据都在这一个文件中,同时单独写一份索引文件,标识下游各个task的数据在文件中的索引start offset 和end offset
触发机制:shuffle reduce task数量小于spark.shuffle.sort.bypassMergeThreshold参数的值,默认为200。该过程的磁盘写机制其实跟未经优化的HashShuffleManager是一模一样的,因为都要创建数量惊人的磁盘文件,只是在最后会做一个磁盘文件的合并而已。而该机制与普通SortShuffleManager运行机制的不同在于:不会进行排序。也就是说,启用该机制的最大好处在于,shuffle write过程中,不需要进行数据的排序操作,也就节省掉了这部分的性能开销。