Spark多节点集群YARN模式下spark-submit staging阶段jar包执行报错问题
Spark Jar包加载路径与Staging阶段报错解决方案
Spark 读取执行Jar包的优先级
- 任务提交时通过
--jars参数指定的Jar:YARN模式下该部分Jar会先上传到HDFS的Spark临时staging目录(默认路径为/user/<当前提交用户名>/.sparkStaging/<本次任务应用ID>/),再分发到所有Executor节点的类路径下加载 - Spark服务安装目录下的
jars/目录:注意YARN集群模式下,该路径指所有NodeManager工作节点上的Spark jars目录,而非仅提交任务的客户端节点的本地路径,仅修改客户端节点的jars目录不会对集群执行生效 - Hadoop/YARN全局公共类路径:对应YARN配置项
yarn.application.classpath中定义的所有路径
Staging阶段Jar相关报错排查步骤
该阶段Jar相关报错通常为类找不到、Jar包冲突两类,可按以下步骤解决:
- 首先确认你添加的Jar包已经同步到集群所有NodeManager节点的Spark
jars/目录下,且文件权限和同目录下其他Spark官方Jar保持一致 - 若不想全节点同步Jar,可在
spark-submit时显式指定Jar路径,本地路径或HDFS路径均可:spark-submit --jars /本地路径/自定义Jar包.jar 其他提交参数 # 集群模式推荐用HDFS路径避免节点找不到本地文件 spark-submit --jars hdfs://<namenode地址>:<端口>/HDFS路径/自定义Jar包.jar 其他提交参数 - 若为Jar包版本冲突导致的报错,可提交时配置优先加载用户自定义的Jar:
spark-submit \ --conf spark.driver.userClassPathFirst=true \ --conf spark.executor.userClassPathFirst=true \ --jars 自定义Jar包路径 \ 其他提交参数 - 检查HDFS上的staging目录权限,确认提交任务的用户对
/user/<当前用户名>/.sparkStaging路径有读写权限
内容的提问来源于stack exchange,提问作者Yasir Abbas
相关产品推荐
相关产品推荐

