Spark .sql.shuffle.partitions对于从Kafka读取Spark批处理作业的最优值



我有一个Spark批处理作业,它从一个有300个分区的Kafka主题中消耗数据。作为我工作的一部分,有各种各样的转换,如group by和join,需要洗牌。

我想知道我是否应该使用spark.sql.shuffle.partitions的默认值200或将其设置为300,这与Kafka中输入分区的数量相同,因此并行任务的数量产生读取它。

感谢

在《学习Spark,第二版》中关于优化和调优Spark应用的章节中;(O'Reilly)它写的是默认值

"对于较小的或流式工作负载来说太高了;您可能希望将其减少到一个较低的值,例如执行器上的内核数或更少。

对于shuffle阶段要设置的shuffle分区数量没有神奇的公式;这个数字可能会根据您的用例、数据集、内核数量和可用的执行器内存数量而有所不同——这是一种试错方法。">

您的目标应该是减少通过网络发送给执行器任务的小分区的数量。

有一个关于为大规模工作负载调优Apache Spark的演讲录音,其中也谈到了这种配置。

但是,当您使用Spark 3时。由于自适应查询执行(AQE)框架将根据shuffle文件统计信息动态合并shuffle分区,因此您不必考虑那么多。关于AQE框架的更多细节,请参阅本博客。

相关内容

  • 没有找到相关文章

最新更新