YARN 上的 Spark 使用的 vcore 太少

Posted

技术标签:

【中文标题】YARN 上的 Spark 使用的 vcore 太少【英文标题】:Spark on YARN too less vcores used 【发布时间】:2016-11-17 01:30:31 【问题描述】:

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

1 个主节点 64 GB RAM(50 GB 可用) 24 核(19 核可用) 5 个从属节点 每个 64 GB RAM(50 GB 可用) 每个24核(19核可用) 纱线设置 所有容器(一台主机)的内存:50 GB 最小容器大小 = 2 GB 最大容器大小 = 50 GB vcores = 19 最少 #vcores/container = 1 最大#vcores/container = 19

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

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

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

【问题讨论】:

【参考方案1】:

好的,似乎与此处讨论的问题相同:yarn is not honouring yarn.nodemanager.resource.cpu-vcores 该解决方案也对我有用。

【讨论】:

【参考方案2】:

使用 Ambari 时:

从右上角选择 YARN 队列管理器 调度器部分 将“计算器”下拉菜单更改为 =“主要资源”

【讨论】:

【参考方案3】:

用户界面可能具有误导性。当在 YARN 中禁用 vcore 强制时,它只会假设每个容器一个核心,而事实上,如果您查看物理机的实际 CPU 使用率,它可能正在使用所有核心。还要检查 SparkUI 上的核心使用情况,这通常可以更好地了解实际 CPU 使用情况。

【讨论】:

以上是关于YARN 上的 Spark 使用的 vcore 太少的主要内容,如果未能解决你的问题,请参考以下文章

spark on yarn提交后vcore数不对

如何配置 Yarn 以使用所有 vcore?

Mesos 上的独立 Spark 集群访问不同 Hadoop 集群中的 HDFS 数据

为啥 Spark(在 Google Dataproc 上)不使用所有 vcore?

Flink 实战系列Flink on yarn 为什么 Allocated CPU VCores 显示不正确?

Flink 实战系列Flink on yarn 为什么 Allocated CPU VCores 显示不正确?