Hadoop集群执行MapReduce作业时出现Connection Refused问题求助
解决Hadoop MapReduce作业失败:Connection refused to localhost随机端口的问题
我来帮你分析下这个问题,从你提供的日志和配置来看,核心原因是数据节点的NodeManager服务绑定到了localhost,导致主节点的ResourceManager无法跨节点访问到它的ContainerManagementProtocol服务——日志里的随机端口就是这个服务的监听端口,因为NodeManager启动时会随机分配该端口,但如果绑定的是localhost,外部节点根本连不上。
下面是具体的排查和解决步骤:
1. 检查并修复主机名与IP映射
首先确保集群所有节点的/etc/hosts配置正确:
- 主节点
/etc/hosts要包含所有数据节点的主机名和对应IP,比如:193.198.139.50 NameNode 192.168.1.101 DataNode1 192.168.1.102 DataNode2 192.168.1.103 DataNode3 - 每个数据节点的
/etc/hosts也要能正确解析主节点的NameNode主机名,同时自身主机名不要设为localhost(可以改成DataNode1这类标识性名称)。
2. 补全/修正yarn-site.xml配置
你没提供Yarn的核心配置文件yarn-site.xml,这是最关键的遗漏点!默认情况下NodeManager会绑定localhost,必须修改配置让它绑定到集群可访问的地址:
在所有节点的yarn-site.xml中添加以下配置(根据你的集群实际主机名/IP调整):
<configuration> <!-- 配置ResourceManager的各类服务地址 --> <property> <name>yarn.resourcemanager.address</name> <value>NameNode:8032</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>NameNode:8031</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>NameNode:8030</value> </property> <!-- 配置NodeManager绑定到自身公网/集群IP,禁止绑定localhost --> <property> <name>yarn.nodemanager.address</name> <value>${yarn.nodemanager.hostname}:45454</value> </property> <property> <name>yarn.nodemanager.webapp.address</name> <value>${yarn.nodemanager.hostname}:8042</value> </property> <property> <name>yarn.nodemanager.localizer.address</name> <value>${yarn.nodemanager.hostname}:8040</value> </property> <!-- 指定NodeManager的主机名(替换为数据节点实际主机名/IP) --> <property> <name>yarn.nodemanager.hostname</name> <value>DataNode1</value> </property> <!-- 可选:确保容器端口范围开放,避免端口分配问题 --> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>4096</value> </property> <property> <name>yarn.nodemanager.resource.cpu-vcores</name> <value>2</value> </property> </configuration>
注意:每个数据节点的yarn.nodemanager.hostname要设置为自身的主机名或IP,不要统一用同一个值。
3. 重启服务并验证
- 先关闭所有节点的Hadoop服务:
stop-all.sh(或者分别停止HDFS和Yarn服务) - 把修改后的
yarn-site.xml同步到所有节点 - 重新启动集群:
start-all.sh - 在主节点上测试连通性:比如执行
telnet DataNode1 45454,如果能连通说明配置生效 - 再次运行MapReduce作业测试
4. 其他排查点
如果上述步骤没解决问题,可以再检查:
- 数据节点的防火墙:暂时关闭防火墙(比如
systemctl stop firewalld),或者开放Yarn相关端口(8030-8032、8040、8042、45454,以及容器端口范围) - 查看数据节点的NodeManager日志(路径一般是
$HADOOP_HOME/logs/yarn-*-nodemanager-*.log),确认服务是否绑定了正确的IP,有没有启动报错 - 确保所有节点的Hadoop版本完全一致,避免兼容性问题
按照这个思路排查,应该能解决你遇到的连接拒绝问题。如果还有疑问,可以把数据节点的NodeManager日志片段贴出来,我再帮你进一步分析。
内容的提问来源于stack exchange,提问作者Sif
相关产品推荐
相关产品推荐

