我有一个装有16个核心和64GB内存的Spark独立服务器,主节点和工作节点都在同一台服务器上运行。我没有启用动态分配。我的Spark版本是2.0。
但是我不理解的是,当我提交作业并指定:
--num-executors 2
--executor-cores 2
只应使用4个内核。但是当提交作业时,它会占用全部16个内核并启动8个执行器,而忽略了参数。但如果我将参数更改为4
,它将进行相应调整,并会启动4个执行器。
我有一个装有16个核心和64GB内存的Spark独立服务器,主节点和工作节点都在同一台服务器上运行。我没有启用动态分配。我的Spark版本是2.0。
但是我不理解的是,当我提交作业并指定:
--num-executors 2
--executor-cores 2
只应使用4个内核。但是当提交作业时,它会占用全部16个内核并启动8个执行器,而忽略了参数。但如果我将参数更改为4
,它将进行相应调整,并会启动4个执行器。
免责声明: 我真的不知道在独立模式下 --num-executors
是否有效。我没有在 YARN 之外看到过它的使用。
注意: 正如Marco所指出的那样,--num-executors
在 YARN 上已经不再使用了。
您可以通过静态分配(这也适用于 Mesos)结合 spark.cores.max
和 spark.executor.cores
来有效地控制独立模式下执行器的数量,其中执行器的数量确定为:
floor(spark.cores.max / spark.executor.cores)
例如:--conf "spark.cores.max=4" --conf "spark.executor.cores=2"