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不一致解决方法》的操作即可。

### 出现“no datanode、no resourcemanager、no nodemanager”提示的原因 #### 服务未启动 当执行 `stop - all.sh` 脚本时提示没有相应服务,可能是这些服务本身就没有成功启动。例如,在启动过程中由于配置错误、依赖服务未正常运行等原因,导致 DataNode、ResourceManager NodeManager 未能启动。这可能与 Hadoop 配置文件中的参数设置有关,如 `core-site.xml`、`hdfs-site.xml`、`yarn-site.xml` 等文件中的参数配置错误,会影响服务的正常启动。 #### 进程异常退出 在服务启动后,可能由于各种原因导致进程异常退出。比如,DataNode 可能因为磁盘空间不足、网络故障等原因无法正常工作而退出;ResourceManager 可能由于内存不足、配置冲突等问题异常终止;NodeManager 可能因为与 ResourceManager 通信失败等原因停止运行。 #### 脚本执行环境问题 `stop - all.sh` 脚本执行时的环境可能存在问题。例如,脚本依赖的环境变量未正确设置,导致脚本无法准确找到这些服务的进程信息,从而提示没有相应的服务。 #### 与 StandbyCheckpointer 日志的关联 StandbyCheckpointer 主要负责在 Hadoop HA 模式下从 Active NameNode 同步数据到 Standby NameNode。如果 StandbyCheckpointer 出现问题,可能会影响整个 Hadoop 集群的稳定性,进而导致 DataNode、ResourceManager NodeManager 等服务异常。例如,StandbyCheckpointer 同步失败可能会使 NameNode 状态异常,从而影响其他依赖 NameNode 的服务的正常运行。 ### 解决办法 #### 检查服务启动状态 使用 `jps` 命令查看当前 Java 进程,确认 DataNode、ResourceManager NodeManager 是否正常启动。如果没有启动,可以手动启动这些服务: ```bash # 启动 DataNode hadoop-daemon.sh start datanode # 启动 ResourceManager yarn-daemon.sh start resourcemanager # 启动 NodeManager yarn-daemon.sh start nodemanager ``` #### 检查配置文件 仔细检查 `core-site.xml`、`hdfs-site.xml`、`yarn-site.xml` 等配置文件,确保其中的参数设置正确。常见的配置错误包括文件路径错误、端口冲突等。例如,检查 `dfs.datanode.data.dir` 参数是否指向正确的磁盘目录。 #### 查看日志文件 查看 DataNode、ResourceManager NodeManager 的日志文件,找出服务异常退出的原因。日志文件通常位于 Hadoop 安装目录下的 `logs` 文件夹中。例如,查看 DataNode 的日志文件: ```bash tail -f /path/to/hadoop/logs/hadoop-hadoop-datanode-<hostname>.log ``` #### 检查脚本执行环境 确保 `stop - all.sh` 脚本执行时的环境变量设置正确。可以通过 `echo $PATH`、`echo $HADOOP_HOME` 等命令检查环境变量是否正确配置。 #### 重启集群 如果以上方法都无法解决问题,可以尝试重启整个 Hadoop 集群: ```bash # 停止所有服务 stop-all.sh # 启动所有服务 start-all.sh ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值