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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了num-executors可以覆盖spark-submit中的动态分配相关的知识,希望对你有一定的参考价值。

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

答案

你可以从日志中看到:

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。

另一答案

要显式控制执行程序的数量,可以通过设置“--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两者都设置,从而禁用动态分配。

另一答案

在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管理员应该通过配置合理的默认值并在不同的队列中拆分不同类型的工作负载来防止资源匮乏等。

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

以上是关于num-executors可以覆盖spark-submit中的动态分配的主要内容,如果未能解决你的问题,请参考以下文章

spark参数调优

spark参数调整调优

Spark(22)——spark调优

Spark on Yarn:任务提交参数配置

spark调优

spark 参数设置