【问题标题】:Spark: Optimal use of executorsSpark:执行器的最佳使用
【发布时间】:2016-12-16 03:34:07
【问题描述】:

我正在运行一个带有 5 个执行器的 Spark 应用程序,每个执行器有 5 个内核。 但是,我注意到只有一个执行者完成了大部分工作(即大部分任务都在那里完成)。我正在运行的作业是高度并行的(20 个分区或更多)。你如何解释这种行为?

即使我减少每个执行器的核心数量,也会导致同时在单个执行器上运行更少的任务。 我是否应该限制每个执行程序的内存以便使用更多执行程序(以防整个数据适合单个执行程序)?

【问题讨论】:

  • 这取决于您正在处理的转换和数据集。例如,如果您的数据是 (1,2),(2,2),(1,3),(1,9)(1,10) 并且您执行 reduceByKey 所有带有键“1”的数据将是单一的执行人。
  • df.map(lambda x:x).count() 之类的简单转换和操作似乎在同一个执行程序上运行。因此,没有真正涉及任何密钥。
  • 一点点代码 sn-p 和示例数据可能会有所帮助。
  • 原来问题出在Hive存储的数据文件上。似乎设置此选项 mapred.max.split.size 可以解决问题。

标签: apache-spark pyspark


【解决方案1】:

为将来面临此问题的人们添加我的两分钱。这种问题通常是由于 RDD/Dataframe 的分区大小偏斜而出现的。要调试问题,您可以检查 RDD 的分区大小,以了解那里是否存在异常值。如果有的话,你可以看到那个大分区中的元素,以了解正在发生的事情。

this stackoverflow question 中详细解决了类似问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-14
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多