为什么 Spark 提交脚本 Spark-submit 忽略 '--num-executors'



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

注意:如果您不在 YARN 下运行,则执行器编号将被忽略,例如 Spark 独立模式。 请参阅接受的解决方案和评论答案。

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

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

所以

是的,--num-executors在我的原始情况下(即在 YARN 下)没有得到尊重的原因是因为某种错误行为,如果这会让你超过最大内核/内存,它不会给你所有的执行器。

a)防止这种情况(从而回答我的第二个问题)和(b)在运行Spark独立模式(从而解决注释)时强制执行程序数量的一种方法是将执行程序核心总数和执行程序核心配置传递给spark-submit,并使用脚本自动计算执行程序核心总数:

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

现在,如果您无法获得所需的执行程序数,您将得到"等待"并且作业不会启动。

对于 YARN 模式来说,重复信息的这种相互冲突的参数非常烦人。

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

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

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

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

2) 强制阻止 YARN 在同一节点上放置 1 个以上的执行器"

设置/配置执行程序数等于节点数。

相关内容

  • 没有找到相关文章

最新更新