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

Spark on YARN部署报错:无法找到ApplicationMaster主类求助

解决YARN集群模式下Spark提交任务报错:Could not find or load main class org.apache.spark.deploy.yarn.ApplicationMaster

问题描述

使用Hadoop 3.3.6 + Spark 3.4.1,以YARN集群模式提交Python机器学习任务时,应用因AM Container退出(退出码1)失败2次,日志核心报错:

Error: Could not find or load main class org.apache.spark.deploy.yarn.ApplicationMaster

提交命令:

spark-submit
--master yarn 
--deploy-mode cluster 
--num-executors 1 
--executor-cores 3 
--executor-memory 6g 
"C:\Users\UCKAN\Desktop\Python_Codes\Demo-Churn\BigDataML.py"

Spark会话配置:

import pyspark
from pyspark.sql import SparkSession
from pyspark.conf import SparkConf
from pyspark import SparkContext
import pandas as pd

spark = SparkSession.builder \
   .master("yarn") \
   .appName("churn_modellemesi") \
   .config("spark.executor.memory", "6g") \
   .config("spark.executor.instances", "1") \
   .config("spark.executor.cores", "2") \
   .config("spark.dynamicAllocation.enabled", "true") \
   .config("spark.driver.memory", "4g") \
   .config("spark.shuffle.service.enabled", "true") \
   .getOrCreate()

已验证:

  • 环境变量HADOOP_HOME、SPARK_HOME、HADOOP_CONF_DIR配置正确
  • spark-env.cmd中已定义HADOOP_CONF_DIR
  • Spark独立模式提交应用正常

可能原因及解决方案

1. Spark的YARN依赖包未正确分发到HDFS

YARN集群模式下,Spark需要将自身依赖包上传到HDFS供ApplicationMaster和Executor调用。若未配置自动上传或上传失败,会导致类加载失败。

解决步骤:

  • 手动将Spark jar包上传到HDFS(替换hdfs://your-nn-host:port/path/to/spark-jars为你的HDFS路径):
hdfs dfs -mkdir -p /spark/jars
hdfs dfs -put $SPARK_HOME/jars/* /spark/jars/
  • 提交命令中添加--conf spark.yarn.jars=hdfs://your-nn-host:port/spark/jars/*指定依赖路径,或在spark-defaults.conf中配置该参数永久生效。

2. Spark与Hadoop版本兼容性问题

Spark 3.4.1官方支持Hadoop 3.3.x,但预编译包版本不匹配会引发适配问题。

解决步骤:

  • 确认使用的Spark预编译包为spark-3.4.1-bin-hadoop3.tgz(对应Hadoop 3.x版本),而非适配Hadoop 2.x的包。
  • 若自行编译Spark,重新指定Hadoop版本编译:
./build/mvn -DskipTests -Dhadoop.version=3.3.6 package

3. YARN的classpath缺失Spark路径

YARN启动脚本中未包含Spark jar包路径,导致ApplicationMaster无法加载指定类。

解决步骤(Windows环境):

  • 编辑HADOOP_HOME/etc/hadoop/yarn-env.cmd,添加:
set YARN_CLASSPATH=%YARN_CLASSPATH%;%SPARK_HOME%\jars\*
  • 重启YARN服务。

4. 提交命令与代码配置冲突

提交命令中--executor-cores 3与代码内spark.executor.cores=2参数冲突,可能引发资源分配异常,间接导致类加载失败。

解决步骤:

  • 统一配置来源:要么完全通过提交命令指定资源参数,要么在代码中配置,删除重复冲突的配置项。例如删除代码内的spark.executor.instances、spark.executor.cores、spark.executor.memory配置,由提交命令统一控制。

5. Windows路径格式适配问题

Windows本地路径(带盘符、反斜杠)在跨平台集群(含Linux节点)中无法被YARN正确识别,导致脚本或依赖加载失败。

解决步骤:

  • 将Python脚本上传到HDFS,使用HDFS路径提交:
hdfs dfs -put "C:\Users\UCKAN\Desktop\Python_Codes\Demo-Churn\BigDataML.py" /user/uckan/
spark-submit --master yarn --deploy-mode cluster --num-executors 1 --executor-cores 3 --executor-memory 6g hdfs://your-nn-host:port/user/uckan/BigDataML.py
  • 若集群全为Windows节点,将路径改为正斜杠或双反斜杠转义格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 16:42:53