HDFS NameNode元数据丢失故障处理

1. NameNode元数据丢失故障处理

NameNode故障后,可以采用如下两种方法恢复数据

1.1. 方法一:将SecondaryNameNode中数据拷贝到NameNode存储数据的目录

先模拟NameNode出现故障

1
2
3
4
5
6
$ jps
40528 Jps
38147 NameNode
38310 DataNode
$ kill -9 38147 # 强制杀死NameNode
$ rm -rf /usr/local/hadoop/tmp/dfs/name/* # 删除NameNode所有数据

拷贝SecondaryNameNode中数据到原NameNode存储数据目录

1
scp -r root@hadoop3:/usr/local/hadoop/tmp/dfs/namesecondary/* /usr/local/hadoop/tmp/dfs/name/

启动NameNode,此时数据已恢复

1
hadoop-daemon.sh start namenode

方法二:使用-importCheckpoint选项启动NameNode守护进程,从而将SecondaryNameNode中数据拷贝到NameNode目录中

先模拟NameNode出现故障

1
2
3
4
5
6
$ jps
40528 Jps
38147 NameNode
38310 DataNode
$ kill -9 38147 # 强制杀死NameNode
$ rm -rf /usr/local/hadoop/tmp/dfs/name/* # 删除NameNode所有数据

若SecondaryNameNode不和NameNode在一个主机节点上,需要将SecondaryNameNode存储数据的目录拷贝到NameNode存储数据的平级目录。如果在同一节点上,两个组件的数据目录默认就是平级目录,不必操作

1
2
3
$ scp -r root@hadoop3:/usr/local/hadoop/tmp/dfs/namesecondary /usr/local/hadoop/tmp/dfs
$ ls /usr/local/hadoop/tmp/dfs # namesecondary与name此时位于同一目录
data name namesecondary

再删除namesecondary中的in_use.lock文件

1
2
3
$ ls /usr/local/hadoop/tmp/dfs/namesecondary/
current in_use.lock
$ rm -rf /usr/local/hadoop/tmp/dfs/namesecondary/in_use.lock # 删除

导入检查点数据(等待一会ctrl+c结束掉)。这一步不知道为什么出现错误FATAL namenode.NameNode: Failed to start namenode.java.lang.IllegalArgumentException: URI has an authority component,目前还没找到原因。

1
hdfs namenode -importCheckpoint

再启动namenode

1
hadoop-daemon.sh start namenode
panchaoxin wechat
关注我的公众号
支持一下