概述
NameNode故障后,可以采用如下两种方法恢复数据。
方法一
将 SecondaryNameNode 中数据拷贝到 NameNode 存储数据的目录
停止 NameNode
kill -9 NameNode进程删除NameNode存储的数据
$ rm -rf /devtools/hadoop-3.0.3/data/tmp/dfs/name/*拷贝 SecondaryNameNode 中数据到 NameNode 存储数据目录
$cp /devtools/hadoop-3.0.3/data/tmp/dfs/namesecondary/* /devtools/hadoop-3.0.3/data/tmp/dfs/name/启动 NameNode
$ start-dfs.sh
方法二
使用-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>/devtools/hadoop-3.0.3/data/tmp/dfs/name</value> </property>停止 NameNode
kill -9 NameNode进程删除 NameNode 数据
$ rm -rf /devtools/hadoop-3.0.3/data/tmp/dfs/name/*如果 SecondaryNameNode 不和 NameNode 在一个主机节点上,需要将 SecondaryNameNode存储数据的目录拷贝到NameNode存储数据的平级目录,并删除in_use.lock文件
$ cp /devtools/hadoop-3.0.3/data/tmp/dfs/namesecondary /devtools/hadoop-3.0.3/data/tmp/dfs/name/$ rm -rf in_use.lock导入检查点数据(等待一会ctrl+c结束掉)
$ hdfs namenode -importCheckpoint启动NameNode
$ start-dfs.sh