HDFS editlog和fsimage文件
迪丽瓦拉
2024-05-29 03:42:29
0

edits文件(编辑日志)

文件名前缀:edits
文件名后缀:该文件存储的事务ID
文件系统客户端执行写操作时,这些事务首先会记录到edits日志中

fsimage(镜像文件)

        每个fsimage文件存储的都是文件系统元数据信息(文件及目录结构 组成文件的块的信息 副本数量信息),如果NameNode发生故障,最近的fsimage文件会被载入到内存中,用来重构元数据的最近状态,再从相关点开始向前执行edits日志文件中记录的每个事务

        数据块Block存储在DataNode中,但是fsimage文件中并不描述block和DataNode的映射关系,取而代之的是,NameNode将这种映射关系存储在内存中,这种映射关系通过DataNode向NameNode发送最新的块列表信息,使NameNode在内存中生成这种映射关系。

fsimage和edits合并实现原理

为什么要合并?

        在NameNode运行期间,客户端对HDFS的写操作都保存到edits文件中,久而久之edits文件会变得很大,虽然这对NameNode运行的时候是没有影响的,但是在NameNode重启的时候,NameNode先将fsimage中的内容映射到内存中,然后再一条一条执行edits编辑日志中的操作当edits文件非常大的时候会导致NameNode启动的时间非常漫长,而在这段时间中HDFS处于安全模式,所以需要在NameNode运行的时候将edits和fsimage定时进行合并,减小edits文件的大小。

在Hadoop 2.x版本中提供了NameNode HA机制,通过配置奇数个JournalNode来实现HA

        HA机制通过在同一个集群中运行两个NameNode(active和standby)来解决NameNode的单点故障问题,在任何时间只有一台机器处于Active状态;另一个集群则是处于standby状态,Active NameNode负责集群中所有客户端你的操作,而Standby NameNode主要用于备用,它主要位置足够的状态,如果必要可以提供快速的故障恢复。

        为了让Standby NameNode的状态和Active NameNode保持同步,即元数据保持一致,它们都将会和journalNodes守护进程通信,当Active NameNode执行任何有关命名空间的修改,它需要持久化到一半以上的JournalNodes上(通过edits log持久化存储),而Standby NameNode负责观察edits log的变化,它能够从JournalNodes中edits信息,并更新到其内部的命名空间,一旦Actiuve NN出现故障,Standby 将会保证从JournalNodes中读取出了全部的edits,然后切换成Acitve状态, Standby NN读取完全部的edits可确保发生故障转移前,是和Active NN拥有完全同步的命名空间状态。        

这种机制如何实现fsimage和edits的合并

        在standby NN节点上会一直运行一个叫做CheckpointerThread的线程,这个线程调用StandbyCheckpointer类的doWork()方法,而doWork方法会每隔Math.min(checkpointCheckPeriod,checkpointPeriod)秒来做一次合并操作。

合并的过程:

1、Standby NN检查是否达到checkPoint条件,(离上一次checkpoint操作是否已经有一个小时,或者HDFS已经进行了100万次操作)。
2、检查达到checkPoint条件后如果成立会合并fsimage和edits文件,以fsimage.ckpt_txid格式保存到SBNN的磁盘上,并且随之生成一个MD5文件。然后将该fsimage.ckpt文件重命名为fsimage。
3、然后 Standby NameNode通过HTTP联系Active NameNode,
4、Active NameNode通过HTTP从 Standby NameNode获取最新的fsimage文件并保持为fsimage.ckpt_txid,然后也生成一个MD5文件,与 Standby NameNode的MD5文件进行比较,确认收到了正确的fsimage文件,然后将文件重命名为fsimage_txid文件,将旧的fsimage和edits文件清理掉;
5、通过上面的几步,fsimage和edits文件就完成了合并,由于HA机制,会使得Standby NameNode和Active NameNode都拥有最新的fsimage和edits文件(之前Hadoop 1.x的SecondaryNameNode中的fsimage和edits不是最新的)

相关内容