Spark独立模式下的执行器数量/核心控制

11

我有一个装有16个核心和64GB内存的Spark独立服务器,主节点和工作节点都在同一台服务器上运行。我没有启用动态分配。我的Spark版本是2.0。

但是我不理解的是,当我提交作业并指定:

--num-executors 2
--executor-cores 2 

只应使用4个内核。但是当提交作业时,它会占用全部16个内核并启动8个执行器,而忽略了参数。但如果我将参数更改为4,它将进行相应调整,并会启动4个执行器。

1个回答

23

免责声明: 我真的不知道在独立模式下 --num-executors 是否有效。我没有在 YARN 之外看到过它的使用。

注意: 正如Marco所指出的那样,--num-executors在 YARN 上已经不再使用了

您可以通过静态分配(这也适用于 Mesos)结合 spark.cores.maxspark.executor.cores 来有效地控制独立模式下执行器的数量,其中执行器的数量确定为:

floor(spark.cores.max / spark.executor.cores)
例如:
--conf "spark.cores.max=4" --conf "spark.executor.cores=2"

谢谢,是的,我们之所以要做一个独立的应用程序是因为我们有三个流作业相互关联,而现在我们只是使用一个盒子进行测试。因此,我们也只是使用 --master local[4]。 - theMadKing
1
我尝试在独立环境中使用相同的“--num-executors”属性,但它没有起作用。当我在YARN集群中尝试时,它可以正常工作。看起来这个属性只适用于YARN部署。你只能使用“spark.cores.max”和“spark.executor.cores”属性来控制独立部署中执行器的数量。 - Hokam
--num-executors只是一个YARN参数。请查看这个问题https://dev59.com/T1wY5IYBdhLWcg3wcHbZ#32628057。 - Marco
2
令人烦恼的是,文档中仍然随机引用了“--num-executors”,并且有一些测试覆盖,并且作为一个选项被欣然接受。还有很多清理工作要做。 - zero323
完美的答案!您必须设置spark.cores.max或spark.deploy.defaultCores中的一个。 - fattah.safa
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接