spark-shell以yarn为master启动时报SparkException: awaitResult异常
问题根因定位
核心报错为Connection refused: /192.168.29.57:33333,结合配置中spark.driver.port固定为33333的设定,问题本质是YARN中的ApplicationMaster(AM)无法和本地Spark Driver进程建立RPC通信,具体触发原因分为三类:
- 本地防火墙/iptables规则拦截了33333端口的入站请求,YARN容器发起的连接被直接拒绝
- hostname绑定配置错误,从启动日志的
Your hostname, XXXXXX resolves to a loopback address: 127.0.1.1告警可以看出,本机hostname默认解析到环回地址,Spark自动选择了wifi0网卡的192.168.29.57,但如果YARN和该地址不在同一网段、或者本机没有在该地址上监听33333端口,就会导致连接失败 - Spark Driver默认仅绑定环回地址127.0.0.1,你固定了driver端口为33333但没有指定driver绑定的对外地址,所以33333端口仅在127.0.0.1上监听,外部YARN容器无法通过192.168.29.57访问该端口
解决方案
按优先级逐一验证即可:
- 优先修复端口监听配置
在spark-defaults.conf中追加如下配置,指定Driver绑定的对外IP:
spark.driver.host 192.168.29.57
修改后重新提交spark-shell任务测试。
2. 检查并放开本地防火墙规则
执行以下命令确认端口监听状态,放开相关Spark端口的入站请求:
# 查看端口监听情况,确认33333是否绑定在0.0.0.0或者192.168.29.57上 netstat -tunlp | grep 33333 # 临时关闭防火墙测试(生产环境请按需配置白名单规则) systemctl stop firewalld ufw disable
- 修复hostname解析配置
编辑/etc/hosts文件,删除127.0.1.1和本机hostname的绑定,追加本机hostname和192.168.29.57的绑定规则:
# 注释掉如下行 # 127.0.1.1 XXXXXX # 追加如下行 192.168.29.57 XXXXXX
同时可以在Spark环境配置文件spark-env.sh中追加固定IP配置,避免Spark自动选网卡出错:
export SPARK_LOCAL_IP=192.168.29.57
- 可选优化(解决日志中的jar包上传告警)
提前把Spark依赖包上传到HDFS,避免每次提交任务都重复上传本地jar包:
# 上传Spark jar包到HDFS hdfs dfs -mkdir -p /spark-jars hdfs dfs -put $SPARK_HOME/jars/* /spark-jars/
然后在spark-defaults.conf中追加配置:
spark.yarn.jars hdfs://localhost:9000/spark-jars/*
内容的提问来源于stack exchange,提问作者Ashish Mishra
相关产品推荐
相关产品推荐

