一、概要
1、Shuffle调优概述
Spark作业性能主要消耗在Shuffle环境,因为其中包含大量磁盘IO、序列化、网络数据传输等操作,如果想提升作业性能,有必要对Shuffle过程进行调优。但也要注意,影响Spark作业性能因素主要还是代码开发、资源参数以及数据倾斜,Shuffle调优只占一小部分,不要舍本逐末。
2、Shuffle发生阶段
3、触发 Shuffle 操作的算子
分类 | 操作 |
---|---|
Repartition相关 | repartition、coalesce、repartitionAndSortWithinPartitions |
*ByKey操作(除了countByKey) | groupByKey,reduceByKey,combineByKey、aggregateByKey、sortBeyKey |
Join相关 | cogroup,join |
二、发展演进
Spark版本 | Shuffle演进 |
---|---|
<=0.8 | Hash Based Shuffle |
0.8.1 | 为 Hash Based Shuffle引入File Consolidation机制 |
0.9 | 引入 ExternalAppendOnlyMap |
1.1 | 引入 Sort Based Shuffle,但默认仍为 Hash Based Shuffle |
1.2 | 默认的 Shuffle 方式改为 Sort Based Shuffle |
1.4 | 引入 Tungsten-Sort Based Shuffle |
1.6 | Tungsten-Sort Based Shuffle 并入 Sort Based Shuffle |
2.0 | Hash Based Shuffle 退出历史舞台 |
0、MapReduce中Shuffle
注:后续Spark Shuffle都以MapReduce Shuffle为参考ÿ