
在该模式下,数据会写入一个数据结构,reduceByKey写入map,一边通过map局部聚合,一边写入内存。达到一定阈值会将内存数据写入磁盘,清空内存结构。在溢写磁盘之前会根据key进行排序,排序后会分批写入磁盘中。一个task会产生多个临时文件,最后再每个task中将所有的临时文件进行合并,也就是一个task的所有数据都在这一个文件中,同时单独写一份索引文件,标识下游各个task的数据在文件中的索引start offset 和end offset

触发机制:shuffle reduce task数量小于spark.shuffle.sort.bypassMergeThreshold参数的值,默认为200。该过程的磁盘写机制其实跟未经优化的HashShuffleManager是一模一样的,因为都要创建数量惊人的磁盘文件,只是在最后会做一个磁盘文件的合并而已。而该机制与普通SortShuffleManager运行机制的不同在于:不会进行排序。也就是说,启用该机制的最大好处在于,shuffle write过程中,不需要进行数据的排序操作,也就节省掉了这部分的性能开销。

本文深入探讨了Spark的shuffle过程中reduceByKey的实现,它将数据写入内存并根据阈值溢写到磁盘。当任务数量小于`spark.shuffle.sort.bypassMergeThreshold`时,会采用未经排序的合并策略,节省排序开销。每个task最终生成一个合并后的文件,并创建索引文件,便于后续处理。
798

被折叠的 条评论
为什么被折叠?



