执行pyspark --master yarn启动Spark on YARN出现卡顿问题
Spark on YARN 执行
pyspark --master yarn卡顿排查方案 已记录的操作与配置
- 执行
./stop-all.sh确认Spark Standalone集群无运行进程 - 客户端节点
~/.bashrc配置:export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop - 集群
yarn-site.xml配置:<configuration> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> </configuration> - 集群
yarn-env.sh配置:export JAVA_HOME=/home/spark/jdk1.8.0_251 export PATH=$JAVA_HOME/bin:$PATH export HADOOP_HOME=/home/spark/hadoop-2.10.1 export PATH=$HADOOP_HOME/bin:$PATH export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop export ANACONDA_HOME=/home/spark/anaconda3 export PATH=$ANACONDA_HOME/bin:$PATH - HDFS操作记录:
- 执行
hadoop fs -mkdir /user/spark/spark-2.4.5-bin-hadoop2.7创建Spark依赖存储目录 - 执行
hadoop fs -put ~/spark-2.4.5-bin-hadoop2.7/jars spark-2.4.5-bin-hadoop2.7上传本地Spark jar包到HDFS
- 执行
spark-defaults.conf配置项:spark.yarn.jars hdfs://devenv/user/${USER}/spark-2.4.5/jars/*- 集群启动与校验:
- 执行
./start-yarn.sh启动YARN服务 - 通过8088端口的YARN WebUI确认ResourceManager、NodeManager服务运行状态正常
- 执行
- 复现路径:执行
pyspark --master yarn启动客户端时触发无响应卡顿
排查步骤
优先校验spark.yarn.jars路径匹配性
对比实际HDFS存储的jar路径和配置的路径:
实际上传jar的目标路径为/user/spark/spark-2.4.5-bin-hadoop2.7/jars,但配置的spark.yarn.jars指向hdfs://devenv/user/${USER}/spark-2.4.5/jars/*,两处存在路径不一致的问题。如果配置的路径不存在,Spark客户端会默认从本地SPARK_HOME/jars目录逐文件上传所有依赖包,总大小通常超过500MB,会造成长时间无响应的卡顿。
校验操作:执行hadoop fs -ls hdfs://devenv/user/${USER}/spark-2.4.5/jars确认路径下jar包存在性,要么修正配置的路径和实际上传路径完全对齐,要么重新上传jar包到配置指定的路径下。校验网络与地址解析
- 检查YARN配置中
yarn.resourcemanager.hostname、HDFS nameservicedevenv的地址映射,确认客户端节点/etc/hosts文件中存在对应主机名到IP的映射,避免客户端无法连通ResourceManager,卡在应用提交的等待环节。 - 确认当前终端可正常连通ResourceManager的RPC端口(默认8032)、HDFS的RPC端口(默认9000),无防火墙拦截。
- 检查YARN配置中
校验配置加载有效性
- 执行
echo $SPARK_CONF_DIR、echo $HADOOP_CONF_DIR确认当前终端会话中配置生效,避免因为未执行source ~/.bashrc,导致客户端未加载到修改后的Spark、Hadoop配置,仍使用默认逻辑反复拉取本地依赖卡顿。 - 执行
pyspark --master yarn --verbose启动程序,打印完整启动日志,定位具体卡顿环节:是应用提交阶段、依赖拉取阶段、还是AM反向注册阶段。
- 执行
校验服务状态
- 登录YARN WebUI查看是否有提交中、无响应的应用记录,确认NodeManager节点的资源剩余量是否满足Spark AM的最小资源要求,避免因为资源不足,AM一直处于等待分配的状态,客户端长时间无响应。
参考截图说明:卡顿状态为启动pyspark后,日志停留在“正在连接YARN”的提示、无后续进度输出;
~/.bashrc配置为终端查看的环境变量配置内容,和上述记录的配置项一致。
内容的提问来源于stack exchange,提问作者Hank Tsai
相关产品推荐
相关产品推荐

