从SecondaryNameNode恢复数据
Secondary NameNode用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照。
在/data/tmp/dfs/namesecondary/current这个目录中查看SecondaryNameNode目录结构。
edits_0000000000000000001-0000000000000000002
fsimage_0000000000000000002
fsimage_0000000000000000002.md5
VERSION
SecondaryNameNode的namesecondary/current目录和主namenode的current目录的布局相同。在主namenode发生故障时(假设没有及时备份数据),可以从SecondaryNameNode恢复数据。
- 方法一:将SecondaryNameNode中数据拷贝到namenode存储数据的目录;
- 方法二:使用-importCheckpoint选项启动namenode守护进程,从而将SecondaryNameNode用作新的主namenode。
方法一实操:
模拟namenode故障,并采用方法一,恢复namenode数据 1.kill -9 namenode进程 2.删除namenode存储的数据(/data/tmp/dfs/name)
rm -rf {HADOOP_HOME}/data/tmp/dfs/name/*
3.拷贝SecondaryNameNode中数据到原namenode存储数据目录
cp -R {HADOOP_HOME}/data/tmp/dfs/namesecondary/* {HADOOP_HOME}/data/tmp/dfs/name/
4.重新启动namenode
sbin/hadoop-daemon.sh start namenode
方法二实操:
模拟namenode故障,并采用方法二,恢复namenode数据
1.修改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-2.7.2/data/tmp/dfs/name</value>
</property>
2.kill -9 namenode进程 3.删除namenode存储的数据(/data/tmp/dfs/name)
rm -rf {HADOOP_HOME}/data/tmp/dfs/name/*
如果SecondaryNameNode不和Namenode在一个主机节点上,需要将SecondaryNameNode存储数据的目录拷贝到Namenode存储数据的平级目录。
$pwd
{HADOOP_HOME}/data/tmp/dfs
$ls
data name namesecondary
4.导入检查点数据(等待一会ctrl+c结束掉)
bin/hdfs namenode -importCheckpoint
5.启动namenode
sbin/hadoop-daemon.sh start namenode
6.如果提示文件锁了,可以删除in_use.lock
rm -rf {HADOOP_HOME}/data/tmp/dfs/namesecondary/in_use.lock