Spark以cluster模式提交YARN作业报Application exited with status 2如何解决
问题原因与解决方案
User application exited with status 2错误本质是YARN上运行的Spark ApplicationMaster(也就是cluster模式下的Driver进程)启动异常退出,client模式正常是因为该模式下Driver运行在你本地提交作业的机器上,和cluster模式的运行环境、权限、资源配置都存在差异,常见故障原因和修复方法如下:
- 配置/资源文件缺失
client模式下你本地机器有作业依赖的配置文件(如core-site.xml、yarn-site.xml等)、业务数据文件,cluster模式下Driver运行在YARN集群的随机节点上,对应节点没有这些文件就会启动失败。
修复:提交作业时通过--files参数传入所有依赖的外置配置文件,所有业务资源优先存放到HDFS,使用HDFS路径访问而非本地路径。 - 依赖包缺失或版本冲突
你本地Spark环境已经安装了作业需要的第三方依赖包,但YARN集群的Spark运行环境没有对应依赖,或者存在版本冲突就会抛出类找不到、方法不存在之类的错误触发退出。
修复:提交作业时通过--jars参数传入所有依赖的第三方Jar包,或者将作业打成包含所有依赖的Fat Jar,打包时注意将Spark、Hadoop相关依赖设为provided范围,避免和集群自带的依赖冲突。 - 权限不足
client模式使用你本地提交用户的权限访问集群资源,cluster模式下Driver的运行用户可能没有对应HDFS路径、YARN队列、数据库等资源的访问权限。
修复:核对作业用到的所有资源的访问权限,确保Driver运行用户有对应权限,也可以在提交作业时指定正确的代理用户参数。 - Driver资源配置不足
client模式下你本地Driver的内存、CPU资源足够支撑作业运行,cluster模式下配置的Driver资源过小,启动时直接OOM退出。
修复:调大Driver资源配置,提交作业时增加参数--driver-memory 4G --driver-cores 2,根据作业实际情况调整参数值。 - 网络连通性问题
你本地机器可以访问作业依赖的外部服务(如业务数据库、消息队列等),但YARN集群节点的网络策略禁止访问这些外部服务。
修复:排查集群节点到依赖外部服务的网络连通性,开放对应端口的访问权限。
你可以通过YARN ResourceManager UI找到对应失败作业的ApplicationMaster日志,查看具体的报错栈信息,就可以快速定位根因针对性处理。
问题补充截图


内容的提问来源于stack exchange,提问作者Korntewin Boonchuay
相关产品推荐
相关产品推荐

