【问题标题】:Why does vcore always equal the number of nodes in Spark on YARN?为什么 vcore 总是等于 Spark on YARN 中的节点数?
【发布时间】:2016-02-01 04:22:09
【问题描述】:

我有一个包含 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 作业:

  • --驱动内存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 个 Vcor​​es Used。但是,当我在 Spark 作业开始运行后检查同一个 YARN 集群页面时,只有 4 Vcor​​es Used,并且 4 Vcor​​es Total

I also found表示capacity-scheduler.xml中有一个参数——叫yarn.scheduler.capacity.resource-calculator

"ResourceCalculator 实现用于比较调度器中的资源。默认即 DefaultResourceCalculator 仅使用 Memory,而 DominantResourceCalculator 使用显性资源来比较多维资源,例如 Memory、CPU 等。"

然后我将该值更改为DominantResourceCalculator

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

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

【问题讨论】:

  • 您能否在 Spark UI 网站(选项卡环境)上检查所有配置选项是否已真正传播到 Spark 应用程序?如果分配有任何问题,您也可以查看 YARN 资源管理器日志。
  • 你解决过这个问题吗?我现在遇到了同样的问题。

标签: apache-spark hadoop-yarn


【解决方案1】:

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

    <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。

【讨论】:

  • YARN 甚至在启用 DefaultResourceCalculator 的 UI 中显示 vCore 应该被视为一个错误。
【解决方案2】:

在没有将 YARN 调度程序设置为 FairScheduler 的情况下,我看到了同样的情况。不过,Spark UI 显示了正确数量的任务,表明没有任何问题。我的集群显示接近 100% 的 CPU 使用率,这证实了这一点。

设置 FairScheduler 后,YARN 资源看起来正确。

【讨论】:

【解决方案3】:

Executors 每人使用 10 个核心,2 个核心用于 Application Master = 42 当您总共有 40 个 vCore 时请求的核心。

将执行器核心减少到 8 并确保重新启动每个 NodeManager

同时修改 yarn-site.xml 并设置这些属性:

yarn.scheduler.minimum-allocation-mb
yarn.scheduler.maximum-allocation-mb
yarn.scheduler.minimum-allocation-vcores
yarn.scheduler.maximum-allocation-vcores

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-17
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 2017-10-29
    • 2019-07-25
    相关资源
    最近更新 更多