当 shuffle 分区大于 200 时会发生啥(数据帧中的 spark.sql.shuffle.partitions 200(默认情况下))
Posted
技术标签:
【中文标题】当 shuffle 分区大于 200 时会发生啥(数据帧中的 spark.sql.shuffle.partitions 200(默认情况下))【英文标题】:what happens when shuffle partition is greater than 200( spark.sql.shuffle.partitions 200(by default) in dataframe)当 shuffle 分区大于 200 时会发生什么(数据帧中的 spark.sql.shuffle.partitions 200(默认情况下)) 【发布时间】:2020-09-06 05:37:15 【问题描述】:spark sql 聚合操作,它打乱数据,即 spark.sql.shuffle.partitions 200(默认情况下)。当 shuffle partition 大于 200 时性能会发生什么变化。
当分区数大于 2000 时,Spark 使用不同的数据结构进行随机记账。因此,如果分区数接近 2000,则将其增加到 2000 以上。
但我的问题是当 shuffle 分区大于 200(比如说 300)时会发生什么。
【问题讨论】:
【参考方案1】:根据为作业分配足够资源的相对大集群上的典型工作负载,默认选择了 200。否则,应根据 2 个因素选择此数字 - 可用内核数和分区大小(建议将分区保持在 100Mb 附近)。选择的分区数应该是可用内核数的倍数,但不应很大(通常是内核数的 1-3 倍)。如果分区数大于默认值,则不应更改 Spark 的行为 - 它只会增加 Spark 需要执行的任务数。
您可以观看this talk from Spark + AI Summit 2019 - 它涵盖了很多关于 Spark 程序优化的细节,包括分区数量的选择。
【讨论】:
以上是关于当 shuffle 分区大于 200 时会发生啥(数据帧中的 spark.sql.shuffle.partitions 200(默认情况下))的主要内容,如果未能解决你的问题,请参考以下文章
spark.sql.shuffle.partitions 的 200 个默认分区难题