最近我想了解Spark如何使用Sort shuffle。我发现spark对mapper方面进行排序,然后使用tim排序在reducer端使用相同的东西。
如果我们已经在mapper方面进行了排序,为什么我们不再重复使用那些重新排序,考虑排序是否代价高昂?
注意:Tim排序采取排序列表进行处理。
在reducer方面,BlockStoreShuffleReader
从多个map任务中获取shuffle数据。尽管map任务对自己的数据进行了排序,但由于reducer需要合并来自多个源的数据,因此必须在所有获取的数据中进行组合排序。