NameNode故障后,可以采用两种方法恢复数据。
方法一:将 SecondaryNameNode 中数据拷贝到 NameNode 存储数据的目录
- kill -9 NameNode 进程
- 删除 NameNode 存储的数据(/opt/module/hadoop-3.1.3/data/tmp/dfs/name)
rm -rf /opt/module/hadoop-3.1.3/data/dfs/name/*
- 拷贝 SecondaryNameNode 中数据到原 NameNode 存储数据目录
scp -r pbh@hadoop104:/opt/module/hadoop-3.1.3/data/dfs/namesecondary/* ./nam
e/
- 重新启动 NameNode
[pbh@hadoop102 hadoop-3.1.3]$ hdfs --daemon start namenode
方法二:使用-importCheckpoint 选项启动 NameNode 守护进程,从而将 SecondaryNameNode中数据拷贝到 NameNode 目录中
- 修改 hdfs-site.xml 中的
<property>
<name>dfs.namenode.checkpoint.period</name>
<value>120</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/module/hadoop-3.1.3/data/dfs/name</value>
</property>
- kill -9 NameNode 进程
- 删除 NameNode 存储的数据(/opt/module/hadoop-3.1.3/data/dfs/name)
rm -rf /opt/module/hadoop-3.1.3/data/dfs/name/*
- 如 果 SecondaryNameNode 不 和 NameNode 在 一 个 主 机 节 点 上 , 需 要 将SecondaryNameNode 存储数据的目录拷贝到 NameNode 存储数据的平级目录,并删除in_use.lock 文件
[pbh@hadoop102 dfs]$ scp -r pbh@hadoop104:/opt/module/hadoop-3.1.3/data/dfs/namesecondary ./
[pbh@hadoop102 namesecondary]$ rm -rf in_use.lock
[pbh@hadoop102 dfs]$ pwd
/opt/module/hadoop-3.1.3/data/dfs
[pbh@hadoop102 dfs]$ ls
data name namesecondary
- 导入检查点数据(等待一会 ctrl+c 结束掉)
[pbh@hadoop102 hadoop-3.1.3]$ bin/hdfs namenode -importCheckpoint
- 启动 NameNode
[pbh@hadoop102 hadoop-3.1.3]$ hdfs --daemon start namenode