一.SecondaryNameNode的作用:
用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照。换句话说其实SecondaryNameNode是namenode的冷备份,而namenode的HA高可用才是namenode的热备份。区别是SecondaryNameNode中存储的元数据不是实时的,滞后于namenode主节点.
Secondary NameNode
工作:
(
1
)
Secondary NameNode
询问
namenode
是否需要
checkpoint
。直接带回
namenode
是否检查结果。
(
2
)
Secondary NameNode
请求执行
checkpoint
。
(
3
)
namenode
滚动正在写的
edits
日志
(
4
)将滚动前的编辑日志和镜像文件拷贝到
Secondary NameNode
(
5
)
Secondary NameNode
加载编辑日志和镜像文件到内存,并合并。
(
6
)生成新的镜像文件
fsimage.chkpoint
(
7
)拷贝
fsimage.chkpoint
到
namenode
(
8
)
namenode
将
fsimage.chkpoint
重新命名成
fsimage
1.checkpoint的附带作用
namenode和secondary namenode的工作目录存储结构完全相同,所以,当namenode故障退出需要重新恢复时,可以从secondary namenode的工作目录中将fsimage拷贝到namenode的工作目录,以恢复namenode的元数据
chkpoint检查时间参数设置
(1)通常情况下,SecondaryNameNode每隔一小时执行一次。
[hdfs-default.xml]
dfs.namenode.checkpoint.period
3600
(2)一分钟检查一次操作次数,当操作次数达到1百万时,SecondaryNameNode执行一次。
dfs.namenode.checkpoint.txns
1000000
操作动作次数
dfs.namenode.checkpoint.check.period
60
1分钟检查一次操作次数
2. 镜像文件和编辑日志文件
namenode被格式化之后,将在/opt/module/hadoop-2.7.2/data/tmp/dfs/name/current目录中产生如下文件
fsimage_0000000000000000000
fsimage_0000000000000000000.md5
seen_txid
VERSION
(1)Fsimage文件:HDFS文件系统元数据的一个永久性的检查点,其中包含HDFS文件系统的所有目录和文件idnode的序列化信息。
(2)Edits文件:存放HDFS文件系统的所有更新操作的路径,文件系统客户端执行的所有写操作首先会被记录到edits文件中。
(3)seen_txid文件保存的是一个数字,就是最后一个edits_的数字
(4)每次Namenode启动的时候都会将fsimage文件读入内存,并从00001开始到seen_txid中记录的数字依次执行每个edits里面的更新操作,保证内存中的元数据信息是最新的、同步的,可以看成Namenode启动的时候就将fsimage和edits文件进行了合并。
3.SecondaryNameNode目录结构
在
/opt/module/hadoop-2.7.2/data/tmp/dfs/namesecondary/current
这个目录中查看
SecondaryNameNode
目录结构。
edits_0000000000000000001-0000000000000000002
fsimage_0000000000000000002
fsimage_0000000000000000002.md5
VERSION
|
此外:
辅助namenode的检查点目录(dfs.namenode.checkpoint.dir)的布局和主namenode的检查点目录的布局完全相同。这种设计的好处:在主namenode发生故障时(假设没有及时备份数据),可以从SecondaryNameNode恢复数据。
方法一:将
SecondaryNameNode
中数据拷贝到
namenode
存储数据的目录;
方法二:使用
-importCheckpoint
选项启动
namenode
守护进程,从而将
SecondaryNameNode
用作新的主
namenode
。
1
)案例实操(一):
模拟
namenode
故障,并采用方法一,恢复
namenode
数据
(
1
)
kill -9
namenode
进程
或者
kill -9 2855
(
2
)删除
namenode
存储的数据(
/opt/module/hadoop-2.7.2/data/tmp/dfs/name
)
rm -rf /opt/module/hadoop-2.7.2/data/tmp/dfs/name/*
(
3
)拷贝
SecondaryNameNode
中数据到原
namenode
存储数据目录
cp
–
r /opt/module/hadoop-2.7.2/data/tmp/dfs/namesecondary/* /opt/module/hadoop-2.7.2/data/tmp/dfs/name/
(
4
)重新启动
namenode
sbin/hadoop-daemon.sh start namenode
2
)案例实操(二)
:
模拟
namenode
故障,并采用方法二,恢复
namenode
数据
(
0
)修改
hdfs-site.xml
中的
dfs.namenode.checkpoint.period
120
dfs.namenode.name.dir
/opt/module/hadoop-2.7.2/data/tmp/dfs/name
|
(
1
)
kill -9 namenode
进程
(
2
)删除
namenode
存储的数据(
/opt/module/hadoop-2.7.2/data/tmp/dfs/name
)
rm -rf /opt/module/hadoop-2.7.2/data/tmp/dfs/name/*
(
3
)导入检查点数据(等待一会
ctrl+c
结束掉)
bin/hdfs namenode -importCheckpoint
(
4
)启动
namenode
sbin/hadoop-daemon.sh start namenode
(
5
)
如果提示文件锁了,可以删除
in_use.lock
rm -rf /opt/module/hadoop-2.7.2/data/tmp/dfs/namesecondary/in_use.lock