HDFS中的NameNode名节点——FSimage

HDFS缓冲区

Fsimage 文件映射,Edits文件操作记录。

与ES的缓冲区不同,ES是维护数据的变更,而HDFS缓冲区是用于名结点维护文件系统元数据(目录树)的机制。

在HDFS集群中,NameNode结点相较于DataNode数量较少,往往几个Namenode支撑着几百个DataNode的元数据和目录索引。当大量数据存入时,众多DataNode上同步进行的数据文件更新会在短时间内产生巨量的元数据(文件信息、块地址)。

想象一个这样的情况,1000台数据结点同时存入数据,但是只有一个名结点。1000GB的数据产生了10GB的元数据,数据节点很快处理完了1GB的平均数据量,但是名结点却要处理10GB的数据量,这时数据明明已经存入却不可用(因为不知道在哪)。

HDFS的FSimage缓冲机制,正是为了解决NameNode上元数据(目录)更新速度的问题,即NameNode直接在内存上更新元数据(内存更快),快速维护更新目录信息,并把数据的硬盘写入操作交由SecondaryNameNode完成(写入硬盘才能不丢失),这样便能保证目录的更新与数据存入相对同步完成。

具体过程:

HDFS启动时, 文件系统的目录树被加载到名节点内存,在Namenode上生成FSimages(元数据文件),此时的FSimages是真实的目录树。当发生数据操作的时候,数据请求经过处理后被分发到Datanode上进行存储,同时NameNode更新存储在内存中的FSimage,并且将数据操作相关信息保存到内存中的Edits文件。内存中的信息虽然快但是不稳定,如果宕机更新的目录树便会丢失,更改过的文件也就找不到了地址了,因此每隔一段时间需要元数据信息(目录)存储到磁盘。每过一段时间或者Fimage文件过大,NameNode会将二者发送给副名结点,副结点会完成二者的合并和检验,然后将新的FSimage推送到Namenode的硬盘上,同时更新Version文件,让NameNode使用新版的FSimage(旧版的也不会被删除)。只有当元数据被写入到硬盘后,存储的数据才是真正安全的存入了。

原文地址:https://www.cnblogs.com/whoyoung/p/11138439.html