spark sql聚合操作,它洗牌数据,即spark.sql.shuffle.partitions 200(默认情况下)。当无序分区大于200时,性能会发生什么变化。
当分区数大于2000时,spark使用不同的数据结构进行无序簿记。所以,如果分区的数量接近2000,则将其增加到2000以上。
但我的问题是当无序分区大于200(假设为300)时会发生什么行为。
spark sql聚合操作,它洗牌数据,即spark.sql.shuffle.partitions 200(默认情况下)。当无序分区大于200时,性能会发生什么变化。
当分区数大于2000时,spark使用不同的数据结构进行无序簿记。所以,如果分区的数量接近2000,则将其增加到2000以上。
但我的问题是当无序分区大于200(假设为300)时会发生什么行为。
1条答案
按热度按时间cqoc49vn1#
根据相对较大的集群上的典型工作负载,选择200作为默认值,并为作业分配足够的资源。否则,应该根据两个因素来选择这个数字—可用内核的数量和分区大小(建议将分区保持在100mb附近)。选定的分区数应该是可用核心数的倍数,但不应该很大(通常是核心数的1-3倍)。如果分区数大于默认值,则不应更改spark的行为—它只会增加spark需要执行的任务数)。
您可以在spark+ai summit 2019上观看这个演讲—它涵盖了spark程序优化的许多细节,包括分区数量的选择。