为什么Spark提交脚本spark-submit忽略`--num-executors`?

时间:2015-01-07 11:29:26

标签: apache-spark yarn

我们在YARN下运行Spark 1.0.0,--num-executors似乎没有增加执行程序的数量,也没有增加使用的节点。我说我想要8,但我通常会在3到5之间结束。输出中没有错误,如果节点向下并且无法说话,这就是我所期望的。

注意:如果您未在YARN下运行,则将忽略num-executors,例如火花独立模式。请参阅已接受的答案以获得解决方案和评论。

更新:如果我要求X资源,我想要X资源,如果我不能拥有它们,我想要被放入队列或给出某种错误消息。这是因为如果我没有获得X资源,我的工作就会失败 - 我知道在我的工作结束之前需要多少资源。我不想在我的工作上实施一些额外的层来检查执行器和执行器的数量。节点我将被给予,以便它可以优雅地杀死工作,然后再自行解决。所以问题的第二部分是“1)如果我不能得到我想要的执行者,有没有办法告诉YARN / Spark失败?2)强制阻止YARN在同一节点上放置多个执行器”< / p>

(在0.9.0中,这不是问题,N个节点意味着N个工作人员和工作只会排队)

2 个答案:

答案 0 :(得分:0)

不,SparkSubmit不会忽略--num-executors(您甚至可以使用环境变量SPARK_EXECUTOR_INSTANCES或配置spark.executor.instances)。由于资源不可用(RAM和/或CPU内核),可能会发生实际执行数量小于预期值的情况。

  

1)如果我无法获得我想要的执行者,有没有办法告诉YARN / Spark失败?

不,我不这么认为。 YARN不起作用。对于YARN,它只是一个无法满足的资源请求。我不确定,但可能来自Driver类,它在ApplicationMaster容器中执行。

  

2)强制停止YARN在同一节点上放置1个以上的执行器&#34;

设置/配置执行器的数量等于节点数。

答案 1 :(得分:0)

所以是的,--num-executors在我原来的情况下(即在YARN下)没有得到尊重的原因是因为某些有缺陷的行为,如果那将会带给你所有的执行者超过最大核心/内存。

一种方法(a)防止这种情况(从而回答我的第二个问题)和(b)在运行火花独立模式时强制执行一些执行器(并因此解决该注释)是通过总执行器核心&amp;执行程序核心配置为spark-submit,并使用脚本自动计算总执行程序核心:

total_executor_cores=`expr ${num_executors} \* ${executor_cores}`

现在,如果你不能得到你想要的数字执行者,你就会“等待”,而且工作也不会开始。

对于YARN模式来说,这个有冲突的论点是重复信息非常烦人。

注意:使用自动缩放群集时,您需要避免通过总核心控制执行程序的数量,而是通过自动缩放设置控制节点数。