HDFS-NameNode和SecondaryNameNode的关系
NameNode简称为NN,SecondaryNameNode 简称为 SNN。
一.NN和SNN工作机制
1.第一阶段:NameNode启动
(1)第一次启动NameNode格式化后,就会创建fsimage和edits文件。
如果不是第一次启动,直接加载编辑日志和镜像文件到内存。
(2)客户端对元数据进行增删改的请求。
(3)NameNode记录操作日志,更新滚动日志
(4)NameNode在内存中对数据进行增删改查。
2.第二阶段: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。
二.Fsimage和Edits解析
1.概念
namenode被格式化之后,将在/opt/hadoop/data/tmp/dfs/name/current目录中产生如下文件:
edits_0000000000000000000
fsimage_0000000000000000000.md5
seen_txid
VERSION
Fsimage文件:HDFS文件系统元数据的一个永久性的检查点,其中包含HDFS文件系统的所有目录和文件idnode的序列化信息
Edits文件:存放HDFS文件系统的所有更新操作的路径,文件系统客户端执行的所有写操作首先会被记录到edits文件中
seen_txid文件保存的是一个数字,就是最后一个edits_的数字
每次NameNode启动的时候都会将fsimage文件读入内存,并从00001开始到seen_txid中记录的数字依次执行每个edits里面的更新操作,保证内存中的元数据信息是最新的,同步的,可以看成NameNode启动的时候就将fsimage和edits文件进行了合并。
2.使用oiv查看fsimage文件
(1)查看oiv和oev命令
[root@hadoop00 logs]# hdfs
oiv apply the offline fsimage viewer to an fsimage
oev apply the offline edits viewer to an edits file
(2)基本语法
hdfs oiv -p 文件类型 -i 镜像文件 -o 转换后文件输出路径
(3)示例
[root@hadoop00 current]# cd /opt/install/hadoop/data/tmp/dfs/name/current
[root@hadoop00 current]# hdfs oiv -p XML -i fsimage_0000000000000010957 -o /opt/install/hadoop/fsimage.xml
[root@hadoop00 current]# cat /opt/install/hadoop/fsimage.xml
大概格式如下
<?xml version="1.0"?>
<fsimage><version>
<layoutVersion>-60</layoutVersion> <onDiskVersion>1</onDiskVersion> <oivRevision>5724a4ad7a27f7af31aa725694d3df09a68bb213</oivRevision></version>
<NameSection>
<namespaceId>1847371313</namespaceId><genstampV1>1000</genstampV1>
<genstampV2>2653</genstampV2><genstampV1Limit>0</genstampV1Limit><lastAllocatedBlockId>1073743477