2016-06-09 55 views
0

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

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

+0

它取决于您正在处理的转换和数据集。例如,如果您的数据是(1,2),(2,2),(1,3),(1,9)(1,10),并且您执行了reduceByKey,则您的所有数据使用键'1'遗嘱执行人。 – Knight71

+0

简单的转换和动作像df.map(lambda x:x).count()似乎在同一个执行器上运行。所以,没有真正涉及的关键。 –

+0

一点点的代码片段和示例数据可能会有所帮助。 – Knight71

回答

0

只是为了增加我的两分钱,为未来面对这个问题的人。这种问题通常是由于RDD/Dataframe的偏斜分区大小造成的。为了调试问题,您可以检查RDD的分区大小,以确定是否存在异常值。如果有的话,你可以看到那个大分区中的元素,以了解发生了什么。

类似问题在this stackoverflow question中有详细说明。

相关问题