Hadoop启动时遇见Port in use: master:50070 和Cannot assign requested address解决办法

解决Hadoop集群搭建中namenode启动失败问题,通过修改hosts文件中master的公网ip为内网ip,成功启动namenode,实现Hadoop集群运行。

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

 

最接买了两个便宜的服务器,本想搭建一个Hdoop集群,可是在搭建的时候遇到了很多的问题,例如:

      namenode不能启动,datanode能正常启动

在master上使用jps查看启动状态:

root@master:/Hadoop/hadoop-3.1.1/logs# jps
38416 NodeManager
37946 DataNode
38619 Jps

查看hadoop安装目录log文件夹下的namenode启动日志提示:

java.net.BindException: Port in use: master:50070
和
java.net.BindException: Port in use: master:50070

最开始本以为是端口占用的问题,于是乎去百度了很多,大部分都是说使用:

lsof -i:50070

来查看占用端口的进程,然后kill掉。

但是使用后却没有发现占用端口的进程。。。

然后我又以为是配置文件的问题,最后折磨了我一天,最后终于找到了问题所在:

首先看/etc/hosts这个文件:

fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
172.16.0.6 instance-cqxyyrb2 instance-cqxyyrb2.novalocal
#这是master的公网ip
106.***.***.66 master
#这是slave1的公网ip
120.***.***.237 slave1
127.0.0.1   localhost root localhost4 localhost4.localdomain4
::1         localhost root localhost6 localhost6.localdomain6

hosts里面的master使用的是公网ip,于是我试了试将其换成内网ip:

首先使用ifconfig查看内网ip

root@master:/Hadoop/hadoop-3.1.1/logs# ifconfig
ens3      Link encap:Ethernet  HWaddr fa:16:3e:68:a9:36  
          inet addr:172.16.0.6  Bcast:172.16.15.255  Mask:255.255.240.0
          inet6 addr: fe80::f816:3eff:fe68:a936/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:182328 errors:0 dropped:0 overruns:0 frame:0
          TX packets:179699 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:18446369 (18.4 MB)  TX bytes:32539342 (32.5 MB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:32097 errors:0 dropped:0 overruns:0 frame:0
          TX packets:32097 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1 
          RX bytes:18132816 (18.1 MB)  TX bytes:18132816 (18.1 MB)

由此得到内网ip为:172.16.0.6,更改master为内网ip:

fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
172.16.0.6 instance-cqxyyrb2 instance-cqxyyrb2.novalocal
#master使用内网ip
172.16.0.6 master
#slave1使用公网ip
120.***.***.237 slave1
127.0.0.1   localhost root localhost4 localhost4.localdomain4
::1         localhost root localhost6 localhost6.localdomain6

最后最后试了下启动成功啦:

root@master:/Hadoop/hadoop-3.1.1/logs# start-all.sh 
Starting namenodes on [master]
Starting datanodes
Starting secondary namenodes [slave1]
Starting resourcemanager
Starting nodemanagers
root@master:/Hadoop/hadoop-3.1.1/logs# jps
39712 NameNode
39862 DataNode
40233 ResourceManager
40377 NodeManager
40730 Jps
root@master:/Hadoop/hadoop-3.1.1/logs# 

这里只需要修改master服务器上的hosts文件,slave1节点上可以不用修改。

原来hosts内master的ip应该使用内网ip,外网ip是不能启动的,原因我暂时没想明白,有知道的同学可以留言告之,谢谢。

### Hadoop 中 `java.net.BindException` 错误分析 在分布式计算环境中,Hadoop 集群可能会遇到 `java.net.BindException: Cannot assign requested address` 的错误。此问题表明尝试绑定到特定地址端口失败。 #### 原因解析 该错误可能由多种因素引起: - **配置不匹配**:如果主机名与实际 IP 地址不符,则可能导致此类错误发生[^3]。 - **网络接口冲突**:当存在多个网络适配器时,程序可能选择了错误的网络接口来监听服务请求[^4]。 - **防火墙或安全组设置不当**:某些情况下,云平台上的虚拟机默认的安全策略会阻止应用程序访问指定端口[^2]。 #### 解决方法 针对上述原因,可以采取如下措施解决问题: 1. **验证并修正配置文件** 确保所有节点中的 `/etc/hosts` 文件正确映射了各节点名称与其内部 IP 地址之间的关系,并且这些信息需保持一致。对于 Hadoop 而言,在核心站点配置 (`core-site.xml`) 命名空间配置 (`hdfs-site.xml`) 中定义的服务 URL 应指向有效的主机名或 IP 地址。 ```xml <configuration> <!-- core-site.xml --> <property> <name>fs.defaultFS</name> <value>hdfs://node01:9000</value> </property> <!-- hdfs-site.xml --> <property> <name>dfs.namenode.http-address</name> <value>node01:50070</value> </property> </configuration> ``` 2. **检查网络连接状态** 确认每台机器能够通过其设定的名字相互解析对方的真实 IP 地址,并能正常通信。可以通过命令行工具如 `ping`, `nslookup` 或者 `dig` 来测试连通性 DNS 解析情况。 3. **调整防火墙规则服务端口权限** 允许必要的入站流量到达目标端口号(例如 NameNode 默认使用的 8020, DataNodes 使用的 50010)。如果是基于云计算环境部署的话,请记得更新相应的安全组规则以开放所需端口范围内的访问权限。 4. **重启相关服务** 完成以上更改之后,建议停止整个集群再重新启动它,以便使新的参数生效。具体操作可参照官方文档指南执行相应指令集。 ---
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值