【问题标题】:Optimal value of spark.sql.shuffle.partitions for a Spark batch Job reading from Kafka从 Kafka 读取 Spark 批处理作业的 spark.sql.shuffle.partitions 的最佳值
【发布时间】:2021-04-22 04:42:46
【问题描述】:

我有一个 Spark 批处理作业,它使用具有 300 个分区的 Kafka 主题中的数据。作为我工作的一部分,有各种转换,例如 group by 和 join,需要改组。

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

谢谢

【问题讨论】:

    标签: apache-spark apache-kafka apache-spark-sql


    【解决方案1】:

    在“Learning Spark, 2nd edition” (O'Reilly) 一书关于优化和调优 Spark 应用程序的章节中,写入了默认值

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

    为shuffle阶段设置的shuffle分区数量没有神奇的公式;该数字可能会因您的用例、数据集、内核数量和可用的执行程序内存量而异 - 这是一种试错法。”

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

    Tuning Apache Spark for Large Scale Workloads 上有一段谈话录音,其中也谈到了这个配置。

    但是,当您使用 Spark 3.x 时,您不会考虑那么多,因为自适应查询执行 (AQE) 框架会根据 shuffle 文件统计信息动态合并 shuffle 分区。 blog 中提供了有关 AQE 框架的更多详细信息。

    【讨论】:

    • 嗨,迈克,感谢您的回复。请问为什么建议使用2-3倍的核心?另外,由于我从 300 个分区读取数据,因此我使用 300 个内核(75 个执行器,每个执行器 4 个内核)。
    • 感谢迈克的意见。我正在使用 Spark 2。
    猜你喜欢
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    • 2018-06-20
    • 2021-10-18
    • 2018-10-26
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    相关资源
    最近更新 更多