num-executors可以覆盖spark-submit中的动态分配

时间:2018-01-20 05:09:57

标签: apache-spark spark-submit

可以在spark-submit命令中指定num-executors覆盖alreay启用的动态分配(spark.dynamicAllocation.enable true)吗?

3 个答案:

答案 0 :(得分:1)

您可以从日志中看到:

INFO util.Utils: Using initial executors = 60, 
max of spark.dynamicAllocation.initialExecutors, spark.dynamicAllocation.minExecutors and spark.executor.instances

这意味着spark将使用max(spark.dynamicAllocation.initialExecutors,spark.dynamicAllocation.minExecutors,spark.executor.instances)

spark.executor.instances是--num-executor。

答案 1 :(得分:0)

要显式控制执行程序的数量,可以通过设置“--num-executors”命令行或spark.executor.instances配置属性来覆盖动态分配。

spark-submit中的

“ - num-executor”属性与spark.dynamicAllocation.enabled不兼容。如果同时指定了spark.dynamicAllocation.enabled和spark.executor.instances,则关闭动态分配并使用指定数量的spxt.executor.instances“。

另外,它会给警告WARN SparkContext:Dynamic Allocation和num executors两者设置,从而禁用动态分配。

答案 2 :(得分:0)

在spark-defaults.conf文件中,可以设置以下内容来控制behaviour of dynamic allocation on Spark2

spark.dynamicAllocation.enabled=true
spark.dynamicAllocation.initialExecutors=1
spark.dynamicAllocation.minExecutors=1
spark.dynamicAllocation.maxExecutors=5

如果您的spark2-submit命令未指定任何内容,则您的工作将从1个执行程序开始,并在需要时增加到5个。

如果您的spark2-submit命令指定以下内容

--num-executors=3

然后,您的工作将从3个执行者开始,如果需要,仍将增长到5个执行者。

检查日志消息中的

  

使用初始执行程序= [initialExecutors],最大值为   spark.dynamicAllocation.initialExecutors,   spark.dynamicAllocation.minExecutors和spark.executor.instances

此外,如果根本不指定spark.dynamicAllocation.maxExecutors,那么在资源匮乏的情况下,它将继续使用尽可能多的执行程序(对于Yarn,这可能受到在将您提交工作的队列排队)。我已经看到Yarn上的“流氓”火花作业在共享群集上消耗了大量资源,而这些资源使其他作业感到饥饿。您的Yarn管理员应通过配置合理的默认值并在不同的队列中划分不同类型的工作负载来防止资源匮乏等。

我建议对性能测试进行任何更改,以覆盖默认值,特别是尝试模拟系统的繁忙时段。