hadoop--HDFS_NameNode和SecondaryNameNode工作机制

NN和2NN工作机制

NameNode中的元数据是存储在哪里?

元数据存在镜像文件Fsimage和编辑日志Edist文件中。在Secondary NameNode节点中,会定期进行Fsimage和Edits的拷贝与合并,保证元数据的更新。

1.假设存储在NameNode节点的磁盘中,因为要经常进行随机访问和响应客户请求,看起来效率过低;那应该是在内存中;

2.假设只存放在内存中,一旦断电,元数据丢失,整个集群便无法工作;

3.因此应该是在存在磁盘中备份元数据的Fsimage中;但当内存中的元数据更新时,如果同时更新Fsiamge,就会导致效率过低,但如果不更新,就会产生一致性问题,一旦NameNode节点断电,就会产生数据丢失;

4.所以还要引入Edits文件(只进行追加操作,效率高),每当元数据有更新或者添加元数据时,修改内存中的元数据并追加到Edits中。
这样,当NameNode节点断电时,可以通过Fsimage和Edits的合并,合成元数据。

5.但如果长时间添加数据到Edits种,会导致该文件数据过大,效率降低,一旦断电,恢复元数据需要的时间过长。

所以,需要定期进行Fsimage和Edits的合并,如果此操作由NameNode节点完成,效率过低;所有,再次引入一个新的节点Secondary NameNode,专门用于Fsimage和Edits的合并。
请添加图片描述

第一阶段

1.第一次启动NameNode格式化后,创建Fsimage和Edits文件;
若非第一次启动,直接加载编辑日志Edits和镜像文件Fsimage到内存;

2.客户端对元数据进行增删改的请求;

3.NameNode记录操作日志,更新滚动日志;

4.NameNode在内存中对元数据进行增删改。

第二阶段

1.Secondary NameNode询问NameNode是否需要CheckPoint(定时1hr);

2.Secondary NameNode请求执行CheckPoint (1min查看一次nn/ 磁盘已满);

3.NameNode滚动正在写的Edits日志;生成新的edits_inprogress_002, 将原来的名称修改为edits_001;

4.将滚动前的编辑日志edits_001和镜像文件fsimage拷贝到Secondary NameNode;

5.Secondary NameNode加载编辑日志edits_001和镜像文件fsimage到内存,并合并;

6.生成新的镜像文件fsimage.chkpoint;

7.拷贝fsimage.chkpoint到NameNode;

8.NameNode将fsimage.chkpoint重新命名成fsimage(覆盖)。

tips:
1.NameNode和Secondary NameNode的唯一区别:NameNode中记录了最新的edits_inprogress_002操作;

2.最新的元数据 = fsimage + edits_inprogress_002,每次启动NameNode的时候,都会加载一次fsimage + edits_inprogress_002,保证内存中的元数据是最新的。

Fsimage和Edits解析

Fsimage和Edits概念

NameNode被格式化之后,将在/opt/module/hadoop-3.2.2/data/dfs/name/current目录下产生如下文件:

[xiaobai@hadoop102 current]$ pwd
/opt/module/hadoop-3.2.2/data/dfs/name/current

请添加图片描述

1.Fsimage文件:HDFS文件系统元数据的一个永久性的检查点,其中包含HDFS文件系统的所有目录和文件inode的序列化信息;

2.Edits文件:存放HDFS文件系统的所有更新操作的路径,文件系统客户端执行的所有写操作首先会被记录到Edits文件中;

3.seen_exid文件保存的是一个数字,就是最后一个edits_的数字(最新的edits文件);
在这里插入图片描述

4.每次NameNode启动的时候都会将Fsimage文件读入内存,家在Edits里面的更新操作,保证内存中的元数据信息是最新的、同步的,可以看成NameNode启动的时候就将Fsimage和Edits文件进行了合并。

oiv查看Fsimage文件

1.查看oiv和oev命令:
oiv: 查看镜像文件;
oev: 查看Edits文件;

[xiaobai@hadoop102 current]$ hdfs
oev                  apply the offline edits viewer to an edits file
oiv                  apply the offline fsimage viewer to an fsimage

在这里插入图片描述
2.基本语法:

hdfs oiv -p 文件类型 -i 镜像文件 -o 转换后文件输出路径

3.案例

[xiaobai@hadoop102 current]$ hdfs oiv -p XML -i fsimage_0000000000000003207 -o /opt/software/fsimage.xml
2021-09-02 22:43:53,417 INFO offlineImageViewer.FSImageHandler: Loading 5 strings
2021-09-02 22:43:53,517 INFO namenode.FSDirectory: GLOBAL serial map: bits=29 maxEntries=536870911
2021-09-02 22:43:53,518 INFO namenode.FSDirectory: USER serial map: bits=24 maxEntries=16777215
2021-09-02 22:43:53,518 INFO namenode.FSDirectory: GROUP serial map: bits=24 maxEntries=16777215
2021-09-02 22:43:53,518 INFO namenode.FSDirectory: XATTR serial map: bits=24 maxEntries=16777215

将显示的xml文件内容拷贝到/opt/software/目录下创建的fsimage.xml文件中
在这里插入图片描述

oev查看Edits文件

1.基本语法

hdfs oev -p 文件类型 -i 编辑日志 -o 转换后文件输出路径

2.案例

[xiaobai@hadoop102 current]$ hdfs oev -p XML -i edits_inprogress_0000000000000003208 -o /opt/software/edits.xml

在这里插入图片描述

问:NameNode如何确定下次开机启动的时候合并哪些Edits?
合并数字最大的,时间戳最晚的。

请添加图片描述

CheckPoint时间设置

1.通常情况下,Secondary NameNode每隔1hr执行一次;

2.1min检查一次操作次数,当操作次数达到1百万次时,Secondary NameNode执行一次。

tips: 可在hdfs-default.xml中查看。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值