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

Spark Shell以YARN模式启动报错,请求排查容器失败原因

排查Spark Shell Yarn-Client启动失败的问题

Hey,我来帮你一步步拆解这个问题,先从你提到的SLF4J绑定冲突入手,再深挖Yarn应用挂掉的核心原因——毕竟日志看不到错误,大概率是日志输出被干扰了,或者我们没找对日志的地方。

1. 先搞定SLF4J绑定冲突(这是日志缺失的元凶)

你看到的SLF4J提示是说类路径里有两个SLF4J的实现,这会直接干扰日志输出,甚至导致应用启动时的错误日志根本打不出来。解决方法很直接:

  • 定位冲突的jar包:除了Spark自带的spark-assembly-1.6.1-hadoop2.6.0-cdh5.7.0.jar里的SLF4J绑定,另一个在jar:file:/...的路径里,你得把这个多余的SLF4J实现jar包移除。
  • 实操方案:要么修改Spark的spark-env.sh,在SPARK_CLASSPATH里排除这个冲突jar;要么直接把那个多余的jar移到备份目录(别直接删,留个后手)。
  • 验证:重启Spark Shell,要是SLF4J的提示消失了,那日志就能正常输出了,接下来找错误就容易多了。

2. 深挖Yarn应用失败的核心原因(就算当前日志空,也有办法找线索)

如果搞定SLF4J后还是看不到日志,或者问题依旧,试试这些方法:

  • 查看Yarn的ApplicationMaster日志:
    这是最关键的一步!先通过yarn application -list找到你失败的应用ID(格式是application_xxxxxx_xxxx),然后用命令:
    yarn logs -applicationId application_xxxxxx_xxxx
    
    这里能看到ApplicationMaster启动的完整日志,大概率能找到启动失败的根因——比如内存不够、权限被拒、依赖找不到之类的。
  • 调整内存配置,避免资源超限:
    Spark Shell默认的内存配置可能超过了Yarn集群的容器限制,你可以启动时手动指定内存参数试试:
    spark-shell --master yarn-client --driver-memory 2g --executor-memory 2g --executor-cores 2
    
    这里的--driver-memory是客户端(Driver)的内存,--executor-memory是每个Executor的内存,根据你的集群实际资源调整,别超过Yarn配置里的yarn.scheduler.maximum-allocation-mb上限。
  • 检查权限问题:
    你用root用户启动,有些Yarn集群会禁止root提交应用。要么切换到普通用户试试,要么修改Yarn的yarn.nodemanager.security.allowed-users配置,把root加进去。
  • 确认版本兼容性:
    你用的Spark 1.6.1搭配CDH 5.7.0是兼容的,但要确保Spark的Hadoop依赖和集群完全匹配——你用的spark-1.6.1-bin-2.6.0-cdh5.7.0是对的,但如果有其他第三方依赖版本不匹配,也会导致启动失败。
  • 检查Yarn节点状态:
    用yarn node -list看看所有NodeManager是不是都正常运行,如果某个节点挂了或者资源耗尽,ApplicationMaster可能没法启动。

3. 快速测试验证

先简化启动命令,用最基础的参数试试:

spark-shell --master yarn-client --driver-memory 1g --executor-memory 1g

如果能成功启动,说明之前的内存配置或者其他参数有问题,再逐步调整回去就行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:53:17