Skip to content

Latest commit

 

History

History
135 lines (95 loc) · 6.08 KB

12、HDFS中NameNode和SecondaryNameNode工作机制.md

File metadata and controls

135 lines (95 loc) · 6.08 KB

NameNode简称为NNSecondaryNameNode简称为2NN

一、NN和2NN工作机制

1、元数据在什么地方?

NameNode中有元数据,那么元数据是存在什么地方呢?

如果元数据存储在NN的内存中,内存有两个特点就是:不可靠(断电即失)、计算速度快;这样保证不了数据的可靠性,一旦断电、元数据丢失,整个集群就无法工作了

如果元数据存储在NN的硬盘中,硬盘的特点是:可靠、计算速度慢;这样虽然保证了数据的可靠性,但是它的计算速度就慢了。

因此HDFS采用了内存 + 磁盘的方式,并且引入了两个概念FsImage与EditsFsImage负责存储数据;Edits负责追加内容(不计算)。每当元数据有更新或者或者添加元数据时,修改内存中的元数据并追加到Edits中。 这样,一旦NN节点断电,就可以通过FsImageEdits的合并,合成元数据。

但是随着Edits文件数据过大,它的效率降低,一旦断电、恢复元数据的时间也过长,因此需要定期进行FsImageEdits的合并,这个工作如果只有NN做,又会效率过低。所以引入一个新的节点2NN专门用于FsImageEdits的合并。

2、NN和2NN的工作机制

下面一张图解释了NN2NN的工作机制:

在这里插入图片描述

它分为两个阶段:

第一阶段:NameNode启动:

  • 第一次启动NN格式化后,创建FsImageEdits文件,如果不是第一次启动,直接加载FsImageEdits到内存
  • 客户端对元数据进行增删改的请求
  • NNEdits记录操作日志,更新滚动日志
  • NN在内存中对元数据进行增删改

第二阶段:Secondary NameNode工作:

  • 2NN定期或当Edits数据满的时候询问NN是否需要CheckPoint(检查是否需要合并)
  • 2NN请求执行CheckPoint
  • NN滚动正在写的Edits日志
  • 然后将滚动前的编辑日志和镜像文件拷贝到2NN
  • 2NN加载编辑日志和镜像文件到内存,并合并
  • 生成新的镜像文件fsimage.chkpoint
  • 拷贝fsimage.chkpointNN
  • NNfsimage.chkpoint重新命名为fsimage

二、FsImage和Edits解析

1、FsImage和Edits文件所处位置

我们可以查看NN所在的hadoop1022NN所在的hadoop104他们的fsimageedits文件:

hadoop102路径:/opt/module/hadoop-3.1.3/data/dfs/name/current

在这里插入图片描述

hadoop104路径:/opt/module/hadoop-3.1.3/data/dfs/namesecondary/current

在这里插入图片描述

可以发现NN2NN多一个文件edits_inprogress...,如果NN宕机,那么2NN可以帮助恢复NN元数据,但是只能恢复一部分,缺少的部分正是该文件。该文件存储的是正在执行的操作

文件解读:

  • Fsimage文件HDFS文件系统元数据的一个永久性的检查点,其中包含HDFS文件系统的所有目录和文件inode的序列化信息
  • Edits文件:存放HDFS文件系统的所有更新操作的路径,文件系统客户端执行的所有写操作首先会被记录到Edits文件中
  • seen_txid文件保存的是一个数字,就是最后一个edits_的数字
  • 每次NN启动的时候都会将Fsimage文件读入内存,加载Edits里面的更新操作,保证内存中的元数据信息是最新的、同步的,可以看成NN启动的时候就将FsimageEdits文件进行了合并

2、oiv查看Fsimage文件

语法:

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

现在使用这个命令查看一下fsimage_0000000000000000394

hdfs oiv -p XML -i fsimage_0000000000000000394 -o /opt/software/fsimage.xml

执行完成之后,会输出一个文件

在这里插入图片描述

下载到桌面:

sz fsimages.xml

打开之后:

在这里插入图片描述

3、oev查看Edits文件

语法:

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

现在使用这个命令查看一下edits_inprogress...

hdfs oev -p XML -i edits_inprogress_0000000000000000398 -o /opt/software/edits.xml

已经有了该文件: 在这里插入图片描述 下载到本地查看:

sz edits.xml

因为现在没有执行任何操作,这个文件还是挺干净的:

在这里插入图片描述

三、CheckPoint时间设置

通常情况下2NN每隔一个小时执行一次检查,可以查看hdfs-default.xml

<property>
	 <name>dfs.namenode.checkpoint.period</name>
	 <value>3600s</value>
</property>

当操作数达到一百万,2NN执行一次:

<property>
	<name>dfs.namenode.checkpoint.txns</name>
	<value>1000000</value>
	<description>操作动作次数</description>
</property>
<property>
 	<name>dfs.namenode.checkpoint.check.period</name>
 	<value>60s</value>
	<description> 1 分钟检查一次操作次数</description>
</property>

如果想要更换时间或者更改操作数,可以配置到hdfs-site.xml