You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark on YARN在Google Cloud Dataproc中Executor数量与配置不符问题

问题排查与解决方案

1. 先确认YARN集群的可用Worker节点状态

登录YARN WebUI(默认端口8088)查看Nodes列表,确认3个Worker节点是否全部处于RUNNING的健康状态,如果有1个节点处于不健康/下线状态,自然只能调度2个Executor。

2. 核对YARN NodeManager的实际资源配额

你自行计算的系统预留规则和Dataproc默认的配置规则可能存在差异,登录任意Worker节点执行以下命令查看YARN可分配的资源上限:

# 查看单节点YARN可分配内存上限,单位为MB
grep yarn.nodemanager.resource.memory-mb /etc/hadoop/conf/yarn-site.xml
# 查看单节点YARN可分配CPU核数上限
grep yarn.nodemanager.resource.cpu-vcores /etc/hadoop/conf/yarn-site.xml

你配置的10GB Executor内存加默认7%的内存开销,单Executor总共需要向YARN申请约10.7GB内存,如果yarn.nodemanager.resource.memory-mb的配置值低于11264MB(11GB),单Worker节点就无法容纳1个你配置的Executor,导致资源不足无法启动第3个。
对应解决方案二选一:

  • 调小spark.executor.memory为8GB,单Executor总申请约8.6GB,适配默认的YARN内存配额
  • 集群创建时自定义配置项yarn:nodemanager.resource.memory-mb为13312MB(13GB),匹配你预先计算的预留规则

3. 检查YARN队列的资源配额限制

Dataproc默认的default队列会配置最大可用资源占集群总资源的比例,若队列总可用内存仅够启动2个你配置的Executor,也会出现该问题。可在YARN WebUI的Scheduler页面查看队列资源上限,按需调整容量调度器配置提升队列可用资源占比。

4. 关闭动态资源分配的配置覆盖

Dataproc默认开启Spark动态资源分配,该特性会自动调整Executor数量,即使你配置了spark.executor.instances也可能被覆盖。添加以下配置关闭动态分配,强制使用固定数量的Executor:

.config("spark.dynamicAllocation.enabled", "false")

5. 明确Client模式的Driver资源配置

你使用client模式提交作业,若在Master节点提交作业,默认Driver会占用Master节点资源,如果未明确配置Driver参数,误将Driver调度到Worker节点的话会占用1个Worker的资源,导致无法启动第3个Executor。可添加以下配置明确Driver资源:

.config("spark.driver.memory", "2g")
.config("spark.driver.cores", "1")

内容的提问来源于stack exchange,提问作者nonoDa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 08:00:00