为什么Spark有时每个核心运行多个任务

时间:2019-01-11 13:43:46

标签: scala apache-spark apache-spark-sql

我正在通过spark-submit在Mesos集群上的Spark 2.2上运行我的作业。我声明:

  • (在sparkSession配置中)spark.executor.cores 5
  • (在spark提交配置中)total-executor-cores 20
  • (在spark提交配置中)驱动程序核心20

所以我在驱动程序上有20个内核,在4个执行程序上各有5个内核。

通常,例如当我查看舞台进度条时

[Stage 12:================================>                   (86 + 20) / 100]

表示完成的任务数(86),正在运行的任务数(20)和任务总数(100)。同样,大多数情况下,正在运行的任务数不会超过total-executor-cores中指定的值,因此在这种情况下为20。

但是现在我有一份工作,看到这样的内容

[Stage 22:================================>                   (355 + 155) / 568]

对于上述相同设置,相同的群集。在SparkUI中,我看到每个执行者有5个内核(按要求),每个执行者一次运行大约30个任务,而通常最多运行5个任务(每个内核1个)。我不明白为什么。

这与我的工作性质有关吗?它涉及将Spark DataFrame强制转换为RDD并在驱动程序上进行收集。示例阶段

val dfOnDriver = df.select("colA", "colB", "colC")
   .rdd
   .map(...)
   .collect
  • 问题1 :为什么正在运行这么多任务?
  • 问题2 ,有没有办法在基于常规执行者的计算中强制这种行为?
  • 问题3 ?这种行为是否比每个核心1个任务更有效?

如果您需要有关我的设置的更多信息,请告诉我。

0 个答案:

没有答案