【发布时间】: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