首页 > 解决方案 > 当 shuffle 分区大于 200 时会发生什么(数据帧中的 spark.sql.shuffle.partitions 200(默认情况下))

问题描述

spark sql 聚合操作,它对数据进行洗牌,即 spark.sql.shuffle.partitions 200(默认情况下)。当 shuffle 分区大于 200 时,性能会发生什么变化。

当分区数大于 2000 时,Spark 使用不同的数据结构进行随机记账。因此,如果分区数接近 2000,则将其增加到 2000 以上。

但我的问题是当 shuffle 分区大于 200(比如说 300)时会发生什么行为。

标签: apache-sparkaggregateshuffledata-partitioning

解决方案


根据为作业分配足够资源的相对大集群上的典型工作负载,默认选择 200。否则,应根据 2 个因素选择此数字 - 可用内核数和分区大小(建议将分区保持在 100Mb 附近)。选择的分区数应该是可用核心数的倍数,但不应该很大(通常是核心数的 1-3 倍)。如果分区数大于默认值,则不应更改 Spark 的行为 - 它只会增加 Spark 需要执行的任务数)。

你可以在 Spark + AI 峰会 2019上观看这个演讲——它涵盖了很多关于 Spark 程序优化的细节,包括分区数量的选择。


推荐阅读