Hadoop集群运行Spark作业时出现Connection Refused错误求助
问题:Spark作业执行时出现Connection refused错误
Hadoop集群运行正常,执行start-all.sh后通过jps可看到NameNode、ResourceManager、DataNode等进程均正常运行,所有DataNode都能连接HDFS。但执行Spark示例作业时,出现以下错误:
Call From namenode/192.168.64.9 to "name of my PC":42319 failed on connection exception: java.net.ConnectException: Connection refused
集群配置信息
/etc/hosts配置
192.168.64.9 namenode.socal.rr.com 192.168.64.6 datanode1.socal.rr.com 192.168.64.7 datanode2.socal.rr.com 192.168.64.8 datanode3.socal.rr.com
DataNode节点jps输出
9474 Jps 5191 DataNode 5337 NodeManager 5914 HistoryServer
NameNode节点jps输出
10352 HistoryServer 9426 ResourceManager 9206 SecondaryNameNode 8969 NameNode 15388 Jps
Hadoop workers/masters配置
- workers文件内容:
192.168.64.6 192.168.64.7 192.168.64.8
- masters文件内容:
192.168.64.9
Hadoop核心配置文件
core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://192.168.64.9:9000</value> </property> </configuration>
hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:///usr/local/hadoop/hdfs/data</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:///usr/local/hadoop/hdfs/data</value> </property> </configuration>
yarn-site.xml
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>192.168.64.9</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>192.168.64.9:8032</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>192.168.64.9:8088</value> </property> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>1536</value> </property> <property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>1536</value> </property> <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>128</value> </property> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> </configuration>
端口相关日志
netstat -tnlpa | grep 43783 tcp 0 0 0.0.0.0:43783 0.0.0.0:* LISTEN 5162/java
问题分析
错误中的"name of my PC":42319是本地PC的主机名和Spark Driver监听的随机端口。Spark作业提交后,YARN上的Executor需要反向连接Driver获取任务、返回结果,若集群节点无法解析你的PC主机名,或PC防火墙阻止了该端口的连接,就会触发Connection refused错误。
解决方法
- 添加主机名映射:在集群所有节点(namenode、datanode1/2/3)的
/etc/hosts文件中,添加PC的IP与主机名映射,格式如下:你的PCIP "name of my PC" - 关闭PC防火墙或开放端口:临时关闭本地PC的防火墙,或手动开放Spark Driver使用的端口(后续可指定固定端口避免重复操作)。
- 提交作业时指定Driver地址:执行
spark-submit时,通过--driver-host参数指定PC的IP,示例:spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster --driver-host 你的PCIP examples/jars/spark-examples_2.12-3.3.0.jar 10 - 配置Spark固定Driver端口:编辑Spark的
spark-defaults.conf文件,添加以下配置指定Driver的固定IP和端口:spark.driver.host=你的PCIP spark.driver.port=4040 # 可自定义固定端口
内容的提问来源于stack exchange,提问作者Data Engineer
相关产品推荐
相关产品推荐

