在之前的文章中,留有很多的坑,本来是想如果有时间一点点的展开细说,但是现实的情况是时间是有限的。趁着现在也许还记得当时的思考点,就来从宏观上简单的回答下这些问题吧!
BypassMergeSortShuffleWriter和HashShuffle有什么区别?
其实BypassMergeSortShuffleWriter 和已经废弃的HashShuffleWriter是类似的,主要的区别是ByPass会将Map端的多个文件汇总为一个文件,这样大大减少了磁盘IO的能力。BypassMergeSortShuffleWriter的具体实现细节可以参考文件:[SPARK][CORE] 面试问题之 BypassMergeSortShuffleWriter的细节

为什么 Spark 中不保留 HashShuffleManager,而是将其作为 SortShuffleManager 的一个 Writer 实现?
统一性和一致性:将 HashShuffle 作为 SortShuffleManager 的一部分可以提升代码的一致性和可维护性。这样所有的 shuffle 操作都使用相同的框架和接口进行实现,减少了代码重复和维护的工作。
性能优化:SortShuffleManager 可以通过选择不同的 Writer 实现进行优化。BypassMergeSortShuffleWriter 作为一种优化策略,一般是在数据和分区较小的情况下执行来获得更好的性能。将其集成到 SortShuffleManager 中,可使 Spark 根据具体情况选择最佳的 ShuffleWriter 策略。
将 HashShuffle 作为 SortShuffleManager 的一个组件,可以为后续的扩展和优化提供更多的灵活性。如果有更好的 Shuffle 实现策略出现,可以很容易地替换或添加新的实现实现。