You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:44:24