Spark调优:如果实在要shuffle,使用map侧预聚合的算子

Posted wwcom123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark调优:如果实在要shuffle,使用map侧预聚合的算子相关的知识,希望对你有一定的参考价值。

  因业务上的需要,无可避免的一些运算一定要使用shuffle操作,无法用map类的算子来替代,那么尽量使用可以map侧预聚合的算子。

 

       map侧预聚合,是指在每个节点本地对相同的key进行一次聚合操作,类似于MapReduce中的本地combine。map-side预聚合之后,每个节点本地就只会有一条相同的key,因为多条相同的key都被聚合起来了。shuffle时,节点间拉取其他节点上的相同key时,就会大大减少需要拉取的数据数量,从而也就减少了磁盘IO以及网络传输开销。

 

  对应到算子,建议使用reduceByKey或者aggregateByKey算子来代替groupByKey算子。因为reduceByKey和aggregateByKey算子都会使用用户自定义的函数对每个节点本地的相同key进行预聚合。而groupByKey算子是不会进行预聚合的,全量的数据会在集群的各个节点之间分发和传输,性能相对较差。

 

  • groupByKey

 技术图片

 

  • reduceByKey

 技术图片

 

以上是关于Spark调优:如果实在要shuffle,使用map侧预聚合的算子的主要内容,如果未能解决你的问题,请参考以下文章

Spark学习之路 SparkCore的调优之Shuffle调优

Spark任务性能调优总结

Spark shuffle 相关参数调优

大数据之Spark:Spark调优之Shuffle调优

Spark性能优化--数据倾斜调优与shuffle调优

spark性能调优 彻底解密spark的Hash Shuffle