相关疑难解决方法(0)

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

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

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

然后,我的YARN群集页面(http:// myhost:8088/cluster/apps)上显示的群集指标显示VCores Total40.这很好!

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

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

  • - driver-memory 20480m
  • --executor-memory 20000m
  • --num-executors 4
  • --executor-cores 10
  • --conf spark.yarn.am.cores = 2
  • --conf spark.yarn.executor.memoryOverhead = 5600

我将--executor-cores设置为10, - num-executors设置4,所以从逻辑上讲,应该总共使用40个Vcores.然而,当我检查了同样的纱线集群页面星火作业开始运行后,只有 4 Vcores使用,和 4 Vcores总

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

"ResourceCalculator实现用于比较调度程序中的资源.默认情况下,即DefaultResourceCalculator仅使用内存,而DominantResourceCalculator使用显性资源来比较多维资源,如内存,CPU等."

然后我将该值更改为DominantResourceCalculator.

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

我还尝试以细粒度的方式运行相同的Spark作业,比如说--num executors 40 --executor-cores 1,我以这种方式再次检查每个工作节点上的CPU状态,并且所有CPU核心都被完全占用.

hadoop-yarn apache-spark

18
推荐指数
1
解决办法
7376
查看次数

YARN上的Spark太少使用了vcores

我在YARN集群(HDP 2.4)中使用Spark,具有以下设置:

  • 1 Masternode
    • 64 GB RAM(可用50 GB)
    • 24核(可用19核)
  • 5 Slavenodes
    • 每个64 GB RAM(可用50 GB)
    • 每个24核(可用19个核)
  • YARN设置
    • 所有容器(一个主机)的内存:50 GB
    • 最小容器尺寸= 2 GB
    • 最大容器大小= 50 GB
    • vcores = 19
    • 最小#vcores/container = 1
    • 最大#vcores/container = 19

当我使用命令运行我的spark应用程序时,spark-submit --num-executors 30 --executor-cores 3 --executor-memory 7g --driver-cores 1 --driver-memory 1800m ...YARN使用以下设置创建31个容器(每个执行程序进程一个+一个驱动程序进程):

  • 正确:主容器有1个核心和~1800 MB RAM
  • 正确:30个从属容器,每个容器约7 GB RAM
  • 但是不正确:根据YARN ResourceManager UI(它只显示95个中的31个而不是91 = 30*3 + 1),每个从属容器只运行1个核心而不是3 个核心,请参见下面的截图

在此输入图像描述

我的问题是:为什么spark-submit参数--executor-cores 3没有效果?

resource-management hadoop-yarn hortonworks-data-platform apache-spark

6
推荐指数
1
解决办法
4669
查看次数