首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Apache :设置executor实例不会更改执行程序

Apache :设置executor实例不会更改执行程序
EN

Stack Overflow用户
提问于 2015-04-29 10:14:03
回答 4查看 43.6K关注 0票数 22

在集群模式下,我有一个Apache应用程序运行在一个纱线集群上(星火在这个集群上有3个节点)。

当应用程序运行时,Spark显示两个执行者(每个在不同的节点上运行)和驱动程序在第三个节点上运行。我希望应用程序使用更多的执行器,所以我尝试将参数--num-executors添加到Spark-submit,并将其设置为6。

spark-submit --driver-memory 3G --num-executors 6 --class main.Application --executor-memory 11G --master yarn-cluster myJar.jar <arg1> <arg2> <arg3> ...

然而,遗嘱执行人的人数仍为2人。

在spark上,我可以看到参数spark.executor.instances是6,正如我所想的那样,而且不知怎么的,仍然只有2个执行器。

我甚至尝试从代码中设置这个参数。

代码语言:javascript
运行
复制
sparkConf.set("spark.executor.instances", "6")

同样,我可以看到参数被设置为6,但仍然只有2个执行者。

有人知道为什么我不能增加我的遗嘱执行人的数量吗?

资源-内存-mb为12g,位于sern-site.xml中。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-04-29 11:04:49

提高yarn.nodemanager.resource.memory-mbyarn-site.xml中的应用

每节点12g,您只能启动驱动程序(3G)和2个执行器(11g)。

Node1 -驱动3g (+7%的开销)

Node2 - executor1 11g (+7%的开销)

Node3 - executor2 11g (+7%的开销)

现在,您正在请求11g的executor3,而且没有一个节点有11g内存可用。

对于7%的开销,请参考spark.yarn.executor.memoryOverhead和spark.yarn.driver.memoryOverhead中的https://spark.apache.org/docs/1.2.0/running-on-yarn.html

票数 23
EN

Stack Overflow用户

发布于 2017-11-21 16:42:19

注意,yarn.nodemanager.resource.memory-mb内存,单个 NodeManager可以在一个节点上跨分配所有容器。

在您的例子中,由于yarn.nodemanager.resource.memory-mb = 12G,如果将分配给任何单个节点上所有纱线容器的内存加起来,它不能超过12G。

您已经为请求了11G ()每个火花执行器容器。虽然11G小于12G,但这仍然行不通。为什么?

  • 因为您必须说明spark.yarn.executor.memoryOverhead,它是min(executorMemory * 0.10, 384) (默认情况下,除非您重写它)。

因此,下面的数学必须正确:

spark.executor.memory + spark.yarn.executor.memoryOverhead <= yarn.nodemanager.resource.memory-mb

有关https://spark.apache.org/docs/latest/running-on-yarn.html的最新文档,请参阅:spark.yarn.executor.memoryOverhead

此外,spark.executor.instances只是,只是一个请求。应用程序的Spark ApplicationMaster将向ResourceManager请求容器数量= spark.executor.instances。ResourceManager将在以下基础上在NodeManager节点上批准请求:

  • 节点上的资源可用性。纱线调度有它自己的细微差别- 是一个很好的入门如何纱线FairScheduler工作。
  • 节点:yarn.nodemanager.resource.memory-mb上是否超过了阈值
    • (在节点* (spark.executor.memory +spark.yarn.executor.memoryOverhead)上运行的火花容器数目) <= yarn.nodemanager.resource.memory-mb*

如果请求未被授予,请求将被排队,并在满足上述条件时被授予。

票数 14
EN

Stack Overflow用户

发布于 2017-09-08 10:02:27

要充分利用spark集群的容量,您需要按照集群设置--num-executors--executor-cores--executor-memory的值:

  • --num-executors命令行标志或spark.executor.instances配置属性控制所请求的执行者的数量;
  • --executor-cores命令行标志或spark.executor.cores配置属性控制执行器可以运行的并发任务的数量;
  • --executor-memory命令行标志或spark.executor.memory配置属性控制堆大小。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29940711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档