Spark Shuffle原理&优化

Spark Shuffle 代码串讲及 Shuffle 优化实践SPARK-2926
展开查看详情

1.Spark Shuffle 及优化介绍 liyuanjian@baidu.com Spark-rd@baidu.com

2.ShuffleManager Shuffle 入口,横跨整个 Application 生命周期, Spark Context 单例

3.ShuffleDependency Shuffle 关系的定义, Shuffle 初始化

4.ShuffleHandle 具体 Shuffle 模型的抽象,与对应实现强耦合

5.ShuffleHandle & ShuffleWriter & ShuffleReader ShufleHandle ShuffleWriter ShuffleReader 说明 BaseShuffleHandle SortShuffleWriter BlockStoreShuffleReader 默认通用的Shuffle方式,使用ExternalSorter完成对aggregator的支持 BypassMergeSortShuffleHandle BypassMergeSortShuffleWriter Hash Based Shuffle Writer,对文件数消耗较大,shuffle规模较小时使用 SerializedShuffleHandle UnsafeShuffleWriter 简单 Shuffle 场景的优化方案,使用 kernal zero-copy 且规避 java 对象带来的额外开销

6.ShuffleHandle BypassMergeSortShuffleHandle 旧版 Spark 中的 Hash Based Shuffle Writer+Consolidate BaseShuffleHandle 当前 默认的 sortBasedShuffle 使用 ExternalSorter 写出 ShuffleMapOutput ,用默认的 ShuffleReader 进行下游处理 SerializedShuffleHandle Tungsten 计划中的 一部分 引入 一种新的 Shuffle 算法,从而降低 shuffle 过程中的内存用量和 Java 对象的额外开销

7.BaseShuffleHandle vs SerializedShuffleHandle Same UnsafeShuffleWriter 与 SortShuffleWriter 输出结构完全一致,复用 ShuffleReader Diff record 级别的排序,使用 ShuffleExternalSorter 使用 zero-copy 的方式做 filemerge , mergeSpillsWithTransferTo 内完成

8.其他数据结构 Spillable & MemoryConsumer Aggregator & ExternalAppendOnlyMap ExternalSorter ShuffleBlockFetcherIterator & ShuffleClient

9.Shuffle 优化 https:// github.com /apache/spark/pull/19745