SSH远程执行Spark Submit时ResourceManager连接异常问题
解决远程SSH执行spark-submit连接YARN ResourceManager失败的问题
问题根因
本地执行时Spark能正确读取YARN配置获取RM地址192.168.1.110:8032,但远程SSH执行时,由于环境变量加载不完整或YARN配置的主机名解析异常,导致Spark无法定位到正确的RM地址,转而使用0.0.0.0:8032尝试连接。
解决方案
1. 修正YARN配置文件中的RM地址
编辑YARN的yarn-site.xml(通常位于$HADOOP_HOME/etc/hadoop/目录下),确保以下参数明确指定为192.168.1.110:
<property> <name>yarn.resourcemanager.address</name> <value>192.168.1.110:8032</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>192.168.1.110:8031</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>192.168.1.110:8030</value> </property>
修改完成后重启YARN服务:
stop-yarn.sh && start-yarn.sh
2. 确保远程SSH执行时加载完整环境变量
远程SSH执行命令默认可能不会加载用户的~/.bashrc或~/.profile,导致Spark/YARN的环境变量未正确初始化。可以通过以下两种方式解决:
- 显式加载
~/.bashrc后执行命令:ssh namenode@192.168.1.110 'source ~/.bashrc && /home/namenode/spark/bin/spark-submit --master yarn --class Main --deploy-mode cluster /home/namenode/jars/data-transformation-service_2.11-0.1.0-SNAPSHOT.jar' - 使用login shell执行命令(自动加载所有profile配置):
ssh namenode@192.168.1.110 'bash -l -c "/home/namenode/spark/bin/spark-submit --master yarn --class Main --deploy-mode cluster /home/namenode/jars/data-transformation-service_2.11-0.1.0-SNAPSHOT.jar"'
3. 修正主机名解析配置
在namenode节点的/etc/hosts文件中,确保主机名与192.168.1.110绑定,避免localhost或0.0.0.0的映射:
192.168.1.110 namenode
同时,在Spark的spark-env.sh(位于$SPARK_HOME/conf/目录下)中添加以下配置,强制Spark使用指定IP:
export SPARK_LOCAL_IP=192.168.1.110
4. 显式指定ResourceManager地址
如果上述方法无效,可以直接在spark-submit命令中指定RM的完整地址,绕过配置读取问题:
ssh namenode@192.168.1.110 '/home/namenode/spark/bin/spark-submit --master yarn://192.168.1.110:8032 --class Main --deploy-mode cluster /home/namenode/jars/data-transformation-service_2.11-0.1.0-SNAPSHOT.jar'
内容的提问来源于stack exchange,提问作者Yohan
相关产品推荐
相关产品推荐

