Hadoop集群:关于NameNode和ResourceManager群起失败的问题

新手搭建集群的时候,往往因为集群没起来,就慌了手脚。通过jps发现,往往NameNode和ResourceManager以及 SecondaryNameNode没有进程。

以上问题的原因主要有以下两点:

  • 集群id不一致
  • 集群端口被占用

集群id不一致解决方法

原因:多次进行namenode格式化造成集群id不一致

解决方法

方法1:删除hadoop集群每个服务器目录下的data和log文件,然后重新启动集群。

方法2:查看data目录下的name中 data/tmp/dfs/data/current/VERSION下的集群id。

#Sat Dec 11 15:36:37 CST 2021
storageID=DS-407cb097-3a25-4589-baa7-d6455a0c6b47
clusterID=CID-d13c02ff-43b5-47fd-a4be-019fcca18398
cTime=0
datanodeUuid=824abac6-b613-4eaf-9f61-bbedf662be1c
storageType=DATA_NODE
layoutVersion=-56

复制其中的clusterID。然后查看其它的datanode节点的集群中对应的VERSION中的信息,让后将namenode中的clusterID覆盖datanode中的clusterID就好了。

集群端口被占用

在启动namenode或ResourceManager失败后,我们同样查看hadoop下log中的日志,日志是很重要的,看了日志比胡乱去猜要好很多。

这里以查看ResourceManager的启动日志为例

Caused by: java.net.BindException: Problem binding to [hadoop2:8031] java.net.BindException: Address already in use; For more details see:  http://wiki.apache.org/hadoop/BindException
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at org.apache.hadoop.net.NetUtils.wrapWithMessage(NetUtils.java:792)
	at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:721)

我们可以看到:Problem binding to [hadoop2:8031] java.net.BindException: Address already in use,意思是这个端口正在使用,正是因为这个原因,才导致我们的ResourceManager启动失败。

问题的原因:拿我自己的经历来说,因为我多次格式化namenode,导致在启动集群的时候,使用jps发现namenode和ResourceManager以及 SecondaryNameNode进程都没起来,但是在后台中,我以上进行都已启动并正在运行,只是因为clusterID的不一致,才导致三个进程没有展示出来。

解决办法:重启集群,再重复《集群id不一致解决方法》的操作即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值