当前位置: 首页 > 知识库问答 >
问题:

为什么vcore总是等于纱线上Spark中的节点数?

羊舌墨一
2023-03-14

我有一个包含5个节点的Hadoop集群,每个节点有12个核心,内存为32GB。我使用YARN作为MapReduce框架,因此我对YARN有以下设置:

  • yarn.nodemanager.resource.cpu-vcores=10
  • yarn.nodemanager.resource.memory-MB=26100

然后,我的YARN cluster页面(http://myhost:8088/cluster/apps)上显示的群集度量值显示vCores Total40。这挺好的!

然后我在上面安装了Spark,并在yarn-client模式下使用spark-shell。

我使用以下配置运行了一个Spark作业:

  • --驱动器-存储器20480M
  • --执行器-内存20000M
  • --数量-执行者4
  • --执行程序-核心10
  • --conf spark.yarn.am.cores=2
  • --conf spark.yarn.executor.MemoryOverhead=5600

我将--executor-cores设置为10--num-executors设置为4,因此逻辑上,应该总共使用了40个Vcores。但是,当我在Spark作业开始运行后检查相同的纱线群集页面时,只有4个vCore4个Vcores总计

我还发现capacity-scheduler.xml中有一个参数--名为yarn.scheduler.capacity.resource-calculator:

“要用于比较计划程序中的资源的ResourceCalculator实现。默认值(即DefaultResourceCalculator仅使用内存,而DominantResourceCalculator使用dominant-resource来比较多维资源,如内存、CPU等)。”

然后我将该值更改为DominantResourceCalculator

但是当我重新启动YARN并运行相同的Spark应用程序时,我仍然得到了相同的结果,比如说集群度量仍然告诉我们使用的VCores是4!我还用htop命令检查了每个节点上的CPU和内存使用情况,我发现没有一个节点的10个CPU核都被完全占用。原因会是什么呢?

我还尝试以细粒度的方式运行相同的Spark作业,例如使用--num executors40--executor-cores1,以这种方式,我再次检查了每个工作节点上的CPU状态,并且所有CPU核都已被完全占用。

共有1个答案

封瑞
2023-03-14

我也想知道同样的问题,但更改资源计算器对我有用。
这是我设置属性的方式:

    <property>
        <name>yarn.scheduler.capacity.resource-calculator</name>      
        <value>org.apache.hadoop.yarn.util.resource.DominantResourceCalculator</value>       
    </property>

在应用程序的YARN UI中检查分配了多少个容器和vcore,改变后容器的数量应该是executors+1,而vcores应该是:(executor-cores*num-executors)+1。

 类似资料:
  • 根据[Spark on YARN resource Manager:YARN容器和Spark Executors之间的关系,YARN容器的数量应该等于Spark应用程序的num-executors。然而,我在运行中确实看到Spark-UI environment选项卡中显示的num-executors是60个,但YARN中显示的容器数量只有37个。我使用的是Spark2.2,而Spark.Dyna

  • 我在Google DataProc集群上运行spark作业。但Spark似乎没有使用集群中所有可用的vCore,如下所示 基于这样和这样的其他一些问题,我已经设置了集群以使用来考虑资源分配的vcpus和内存 但当我提交带有自定义spark标志的作业时,看起来YARN不尊重这些自定义参数,默认使用内存作为资源计算的标准 能帮助某人弄清楚这里发生了什么?

  • 问题内容: 我有tyo字节变量 如果我将它们求和,则求和的值为整数。 为什么a + b是int? 问题答案: 因为Java语言规范这么说 对操作数(第5.6.2节)执行二进制数值提升。 请注意,二进制数值升级执行值集转换(第5.1.13节),并且可能执行拆箱转换(第5.1.8节)。 数字操作数上加法表达式的类型是其操作数的提升类型。 并且,关于数字促销, 扩展原语转换(第5.1.2节)适用于转换以

  • 我想创建一个test React应用程序,但我在安装时遇到了困难:我使用npm安装了Thread,因为Thread msi没有启动,所以: 我读了这个错误消息: 纱线产生v0。15.1错误:找不到包。C:\Users***\React中的json(或bower.json)文件位于C:\Users***\AppData\Roaming\npm\node\u modules\yarnpkg\lib\c

  • 从评论来看: 有人能解释一下它是如何有效的吗?仅仅是它避免拳击的事实就足够了吗?

  • 假设我有一个包含1个主节点、3个核心节点和5个任务节点的集群。如果我在纱线集群模式下运行spark作业,驱动程序将在主节点上运行(主节点是否也可以运行executor?),每个容器可以有X个执行者。我是否有3个5=8个容器?或者仅仅3个容器,因为只有核心节点可以存储数据? 此外,如果我有两个火花作业同时运行,我是每个节点得到2个独立的容器,每个火花作业1个,还是2个火花作业的执行者每个节点共享1个