Hadoop服务的端口50070无法访问的问题

本文解决了一个Hadoop集群中,50070端口仅能通过127.0.0.1访问,而无法通过实际IP访问的问题。通过调整虚拟机的网络设置和Hadoop配置,最终实现了通过真实IP访问该端口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hadoop启动之后,遇到一个奇怪的问题:

VMware虚拟机中Hadoop服务的端口50070无法访问的问题---通过127.0.0.1:50070、localhost:50070、主机名:50070均可访问,唯独IP:50070不能访问到。

通过查找日志:发现datanode的日志中提示:访问MasterNameNode:8020不能访问。

 

排查步骤:

1.首先,各个虚拟机和客户端之间都能ping通,虚拟机都能上外网,说明网络没有问题。

2.各个虚拟机自己的防火墙已经关闭。

3.是不是端口有问题呢?通过命令#netstat -tnpl

 

 

 

发现监听都配置在:127.0.0.1,结合可以通过127.0.0.1:50070能够访问考虑,是不是把这个地址改成真实的IP就可以了?

因为所有hadoop内部配置的都是hostname,所以有两种方法:

1.将hadoop中所有的hostname改成IP的方式。

2.修改Linux的设置,将hostname映射地址改为真实的IP。

研究第二种方式,排查发现:hostname -i命令显示的IP为:127.0.0.1  真实IP

所以,在Master中,实验将/etc/hosts中的127.0.0.1一行注释掉,运行发现部分端口已经改正,还有部分端口没有改正过来。

将各个数据节点中/etc/hosts中的127.0.0.1行去掉,重新启动hadoop发现:

通过http://真实IP:50070已经可以进行访问,问题解决。

转载于:https://www.cnblogs.com/liuys635/p/11340201.html

### Hadoop 50070端口无法访问的原因分析与解决方案 Hadoop 的 NameNode Web UI 默认监听的是 50070 端口,在较新的版本中已被替换为 9870 端口。如果 Windows 客户端无法访问端口,可能涉及以下几个方面的问题: #### 1. **防火墙设置** 防火墙可能是阻止外部客户端访问的关键因素之一。即使虚拟机内部能够正常访问所有端口,但如果主机上的防火墙未开放特定端口,则外部设备(如 Windows 主机)将无法连接到这些端口。 - 可通过以下命令查看当前系统的防火墙状态并确认是否允许指定端口的流量: ```bash systemctl status firewalld ``` - 如果需要放行 TCP 50070 或者新版本中的 9870 端口,可运行如下命令[^3]: ```bash firewall-cmd --add-port=50070/tcp --permanent firewall-cmd --reload ``` #### 2. **绑定地址配置错误** NameNode 的默认监听地址通常被设定为 `localhost` (即 `127.0.0.1`),这会使得它仅接受来自本地机器的请求而忽略远程连接尝试。因此需检查 Hadoop 配置文件 (`core-site.xml`, `hdfs-site.xml`) 中的相关参数。 - 修改 `hdfs-site.xml` 文件以确保 NameNode 绑定至正确的网络接口 IP 地址而非仅仅 localhost: ```xml <property> <name>dfs.namenode.http-address</name> <value>hadoop102:50070</value> <!-- 替换 hadoop102 为主节点实际IP --> </property> ``` #### 3. **SELinux 设置冲突** 除了传统意义上的防火墙外, SELinux(安全增强型 Linux)也可能阻碍某些服务对外提供服务的能力. - 使用命令临时禁用 SELinux 来测试其影响程度: ```bash setenforce 0 ``` - 若要永久更改此行为则编辑 `/etc/selinux/config` 将其中的 `SELINUX=enforcing` 改成 `disabled`. #### 4. **代理或 NAT 层面的影响** 当使用 VMWare/VirtualBox 创建虚拟化环境时,宿主机和客户操作系统之间可能存在额外一层抽象层(NAT),这也可能导致部分端口映射失败或者不可达的情况发生。 - 对于 VirtualBox 用户而言,可以通过创建静态端口转发规则来解决这个问题;而对于 VMware Workstation Pro 则应该调整相应的网络适配器模式为桥接(Bridged Mode). --- ```python import socket def test_port(host='hadoop102', port=50070): """ 测试给定主机名/地址以及端口号是否可达 """ try: sock = socket.create_connection((host, port), timeout=5) print(f"{host}:{port} is reachable.") sock.close() except Exception as e: print(f"Unable to reach {host}:{port}. Error={e}") if __name__ == "__main__": test_port() # Example usage with default values. ``` 以上脚本可用于初步验证目标服务器上的具体端口是否可以从另一台计算机成功建立连接。 --- ### 结论 综合考虑上述几个方面的可能性之后采取相应措施解决问题。最终目的是让 master 节点(hadoop102) 上运行的服务能正确暴露出来供外界调用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值