当应用程序提交给Executor时,内存大小是可配置的,cpu的数量怎么样?

时间:2014-08-13 13:25:13

标签: apache-spark

因此默认情况下,spark会反转每个节点上的所有可用资源,当提交给master的应用程序时,master将在每个worker节点上声明一个执行程序。默认情况下,执行程序内存为512mb,可配置,但是对于cpus,通常我会看到通过主UI为我的应用程序分配了1个核心。因此默认情况下每个应用程序的1个核心也是如此?我是否需要配置spark.cores.max属性以便我的应用程序可以拥有更多内核?如果是这种情况,假设我在每个工作节点上都有4个核心可用,并且在创建sparkContext之前将spark.cores.max.property的系统属性设置为4,然后将所有4个核心分配给我的应用程序?而且,我的应用程序使用的核心数量是否基于我为每个工作节点分配的数量?

1 个答案:

答案 0 :(得分:0)

有一个设置可以为每个执行程序分配核心数:spark.executor.cores。根据每个节点的执行程序数量,您可以相应地设置它以使用所有资源。

关于spark.cores.max,此设置取决于您的资源管理器(Mesos,Yarn,Spark独立模式),如Spark docs所述,我不认为这是您需要担心的关于设置:

  

在独立部署群集或Mesos群集中运行时   “粗粒度”共享模式,CPU核心的最大数量   整个群集(不是每个群组)请求申请   机)。如果未设置,则默认为spark.deploy.defaultCores on   Spark的独立集群管理器,或无限(所有可用内核)   在Mesos上。

关于你的问题,“我的应用程序使用的内核数量是基于我为每个工作节点分配的数量而确实的”,我不确定这个...也许你的数据真的很小,那么你就不会超出cpu了。

附注:如果您使用spark.dynamicAllocation.enabled=true运行Spark(默认情况下根据Spark文档禁用,但默认情况下在AWS EMR的Spark设置上启用),则将根据请求的资源设置执行程序的数量并且可用。因此对我来说,我确定了我的执行者需要多少内存,然后相应地分配资源。