datanode HA无法启动

首先,使用start-dfs.sh启动服务之后,在手动启动其它服务器的datanode报错如下
2020-04-15 13:52:20,446 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for Block pool <registering> (Datanode Uuid unassigned) service to hadoop102/xxx.xxx.xxx.xxx:8020. Exiting.
java.io.IOException: All specified directories are failed to load.
        at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:478)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:1358)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:1323)
        at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:317)
        at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:223)
        at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:802)
        at java.lang.Thread.run(Thread.java:745)
2020-04-15 13:52:20,446 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Ending block pool service for: Block pool <registering> (Datanode Uuid unassigned) service to hadoop102/xxx.xxx.xxx.xxx:8020
2020-04-15 13:52:20,449 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Removed Block pool <registering> (Datanode Uuid unassigned)
2020-04-15 13:52:22,450 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Exiting Datanode
2020-04-15 13:52:22,451 INFO org.apache.hadoop.util.ExitUtil: Exiting with status 0
2020-04-15 13:52:22,462 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: SHUTDOWN_MSG:

报错提示是uuid未指定,没有查到问题

网上找到下面的连接:https://blog.youkuaiyun.com/ZT7524/article/details/93092928

通过检查发现是由于多次执行namenode的初始化导致datanode的集群id不一致

检查配置如下:

namenode VERSION配置信息
#Wed Apr 15 12:56:09 CST 2020
namespaceID=1868237636
clusterID=CID-26bf7250-26c3-41fd-8a37-2b40bd18cd38
cTime=0
storageType=NAME_NODE
blockpoolID=BP-1991139273-192.168.10.101-1586926569194
layoutVersion=-63

datanode VERSION配置信息
#Wed Apr 15 12:59:49 CST 2020
storageID=DS-8e5ec251-8d88-48ca-8709-54581e1bd393
clusterID=CID-f2b59946-1a1d-48a6-9074-4bc01271d777
cTime=0
datanodeUuid=a1c4f299-ef64-4e2f-891d-5a90e39aba06
storageType=DATA_NODE
layoutVersion=-56

更新datanode的集群id之后就可以正常启动了

 

 

### Hadoop启动失败的原因及解决方案 Hadoop启动失败可能由多种原因引起,以下是常见的几种情况及其对应的解决方案: #### 1. **DataNode 文件不一致** 如果之前重新格式化了 NameNode 的文件系统,则 DataNode 中存储的数据会变得不一致。这种情况下,尝试启动 DataNode 将会失败[^1]。 **解决方案**: 停止所有服务并删除 DataNode 数据目录中的旧数据后再重新启动整个集群。 ```bash bigdata/hadoop/sbin/stop-all.sh rm -rf /root/bigdata/hadoop/hdfs/data bigdata/hadoop/sbin/start-all.sh ``` --- #### 2. **未正确配置核心参数** Hadoop 配置文件(如 `core-site.xml` 和 `hdfs-site.xml`)可能存在错误设置,或者路径指向了不存在的位置。这可能导致 Namenode 或 Datanode 无法正常加载配置信息[^4]。 **解决方案**: 检查配置文件是否正确指定如下字段: - `fs.defaultFS`: 定义默认的文件系统 URI。 - `dfs.namenode.name.dir`: 指定 NameNode 存储元数据的位置。 - `dfs.datanode.data.dir`: 指定 DataNode 存储实际数据的位置。 确认这些路径存在且可写入。如果有更改过配置文件,请务必重启整个集群以使新配置生效[^2]。 --- #### 3. **Namenode 初始化问题** 有时由于某些异常操作(例如强制终止进程),可能会导致 NameNode 元数据损坏或丢失。此时即使成功启动 NameNode,也可能影响后续组件的工作状态[^3]。 **解决方案**: 按照以下步骤清理环境并重置 NameNode: 1. 关闭当前运行的服务; 2. 删除原有数据目录(需谨慎备份重要资料); 3. 使用命令重新格式化 NameNode 并初始化 JournalNodes (如有启用高可用架构); ```bash hdfs namenode -format ``` 4. 启动 Zookeeper 及 JournalNodes (仅适用于 HA 场景); 5. 最终调用 `start-all.sh` 来恢复完整的分布式计算框架功能。 --- #### 4. **端口冲突或其他网络障碍** 多个实例在同一台机器上竞争相同端口号亦或是防火墙阻止必要的通信连接都会阻碍各节点间正常的交互过程。 **排查手段**: 利用 netstat 工具检测是否有重复占用的关键端口(比如8020,9870等),同时确保每台服务器之间能够无障碍访问彼此公开的服务地址。 --- #### 5. **处于安全模式下未能及时退出** 当 HDFS 处于维护期间切换至保护状态时,任何写请求都将被拒绝直到管理员显式解除限制为止[^5]。 **处理方式**: 尝试手动离开安全模式: ```bash hdfs dfsadmin -safemode leave ``` 若依旧报错则考虑调整阈值百分比来加速完成条件判断逻辑从而允许提前结束该阶段。 --- 以上列举了几类典型的故障现象以及相应的修复措施供参考应用到具体场景当中去逐一排除潜在隐患直至恢复正常运作流程为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值