YARN 上的 Spark 使用的 vcore 太少
Spark on YARN too less vcores used
我在具有以下设置的 YARN 集群 (HDP 2.4) 中使用 Spark:
- 1 个主节点
- 64 GB 内存(可用 50 GB)
- 24 核(可用 19 核)
- 5 个从属节点
- 每个 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,每个从属容器仅 运行s 具有 1 个核心 而不是 3 个UI(它只显示 95 个中的 31 个正在使用,而不是 91 = 30 * 3 + 1),请参见下面的屏幕截图
我的问题是:为什么spark-submit
参数--executor-cores 3
没有效果?
好的,似乎与此处讨论的问题相同:yarn is not honouring yarn.nodemanager.resource.cpu-vcores该解决方案也适用于我。
使用 Ambari 时:
- Select 右上角的 YARN 队列管理器
- 调度程序部分
- 将 "Calculator" 下拉菜单更改为 = "Dominant Resource"
UI 可能具有误导性。当在 YARN 中禁用 vcore enforcement 时,它只会假定每个容器一个核心,而实际上,如果您查看物理机的实际 CPU 使用情况,它可能会使用所有核心。还要检查您的 SparkUI 上的核心用法,这通常可以更好地理解实际的 CPU 用法。
我在具有以下设置的 YARN 集群 (HDP 2.4) 中使用 Spark:
- 1 个主节点
- 64 GB 内存(可用 50 GB)
- 24 核(可用 19 核)
- 5 个从属节点
- 每个 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,每个从属容器仅 运行s 具有 1 个核心 而不是 3 个UI(它只显示 95 个中的 31 个正在使用,而不是 91 = 30 * 3 + 1),请参见下面的屏幕截图
我的问题是:为什么spark-submit
参数--executor-cores 3
没有效果?
好的,似乎与此处讨论的问题相同:yarn is not honouring yarn.nodemanager.resource.cpu-vcores该解决方案也适用于我。
使用 Ambari 时:
- Select 右上角的 YARN 队列管理器
- 调度程序部分
- 将 "Calculator" 下拉菜单更改为 = "Dominant Resource"
UI 可能具有误导性。当在 YARN 中禁用 vcore enforcement 时,它只会假定每个容器一个核心,而实际上,如果您查看物理机的实际 CPU 使用情况,它可能会使用所有核心。还要检查您的 SparkUI 上的核心用法,这通常可以更好地理解实际的 CPU 用法。