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

Spark-Shell与Spark-Submit在Yarn客户端模式下Executor配置不一致问题咨询

解决Spark-Shell与Spark-Submit在Yarn客户端模式下的配置差异问题

我之前碰到过好几个类似的案例,这种差异一般和配置加载优先级、提交命令的隐性参数或者运行环境权限有关,咱们一步步来排查解决:

1. 先验证Spark-Submit是否真的没读取到spark-defaults.conf

你可以给Spark-Submit加个--verbose参数,看看它实际加载的配置细节:

spark-submit --verbose --class 你的主类名 你的应用jar包

在输出里找到Spark Properties区块,检查spark.executor.instances的值是不是还是2。如果确实没读到配置,那基本就是配置加载优先级的问题了。

2. 排查配置加载优先级的坑

Spark的配置加载是有明确优先级的:命令行参数 > 提交时指定的--properties-file > spark-defaults.conf > 系统环境变量。你需要确认:

  • 你的Spark-Submit命令里有没有隐性传递--num-executors 2或者spark.executor.instances=2这类参数?比如是不是用了封装脚本,里面偷偷加了这些配置?
  • 提交时有没有指定其他--properties-file参数,覆盖了默认的spark-defaults.conf?

3. 确认两种运行方式的环境一致性

有时候用户会用不同用户或者不同环境变量运行Spark-Submit和Spark-Shell:

  • 检查运行Spark-Submit的用户有没有读取$SPARK_HOME/conf/spark-defaults.conf的权限?比如Spark-Shell用root跑,Spark-Submit用普通用户,就可能因为权限问题读不到配置。
  • 对比两种运行场景下的$SPARK_HOME环境变量是否一致?运行前先执行echo $SPARK_HOME确认。

4. 强制指定参数做验证(临时方案+问题定位)

如果前面排查没结果,可以在Spark-Submit命令里显式指定Executor数量,看看能不能正常运行:

spark-submit --class 你的主类名 --num-executors 5 你的应用jar包

如果这样能成功创建5个Executor并正常运行,那说明确实是默认配置没被加载,回到前面的步骤继续排查配置加载问题;如果还是不行,那大概率是Yarn资源不足或者应用本身的问题,得去看Yarn的日志(比如yarn logs -applicationId <你的应用ID>)进一步定位。

5. 检查Yarn队列的资源限制

还有一种可能:Spark-Shell和Spark-Submit提交到了不同的Yarn队列,而目标队列的资源上限就是2个Executor。你可以检查:

  • spark-defaults.conf里有没有配置spark.yarn.queue?
  • Spark-Submit命令里有没有用--queue参数指定了不同的队列?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:12:23