HDFS 元数据管理机制

HDFS 元数据,按类型分,主要包括以下几个部分:

1、文件、目录自身的属性信息,例如文件名,目录名,修改信息等。
2、文件记录的信息的存储相关的信息,例如存储块信息,分块情况,副本个数等。
3、记录 HDFS 的 Datanode 的信息,用于 DataNode 的管理。
按形式分为内存元数据和元数据文件两种,分别存在内存和磁盘上。

HDFS 磁盘上元数据文件分为两类,用于持久化存储:

fsimage 镜像文件:是元数据的一个持久化的检查点,包含 Hadoop 文件系统中的所有
目录和文件元数据信息,但不包含文件块位置的信息。文件块位置信息只存储在内存中,是 在 datanode 加入集群的时候,namenode 询问 datanode 得到的,并且间断的更新。
Edits 编辑日志:存放的是 Hadoop 文件系统的所有更改操作(文件创建,删除或修改)
的日志,文件系统客户端执行的更改操作首先会被记录到 edits 文件中。
fsimage 和 edits 文件都是经过序列化的,在 NameNode 启动的时候,它会将 fsimage
文件中的内容加载到内存中,之后再执行 edits 文件中的各项操作,使得内存中的元数据和
实际的同步,存在内存中的元数据支持客户端的读操作,也是最完整的元数据。
当客户端对 HDFS 中的文件进行新增或者修改操作,操作记录首先被记入 edits 日志文
件中,当客户端操作成功后,相应的元数据会更新到内存元数据中。因为 fsimage 文件一般
都很大(GB 级别的很常见),如果所有的更新操作都往 fsimage 文件中添加,这样会导致系
统运行的十分缓慢。
HDFS 这种设计实现着手于:一是内存中数据更新、查询快,极大缩短了操作响应时间; 二是内存中元数据丢失风险颇高(断电等),因此辅佐元数据镜像文件(fsimage)+编辑日
志文件(edits)的备份机制进行确保元数据的安全。
NameNode 维护整个文件系统元数据。因此,元数据的准确管理,影响着 HDFS 提供文件
存储服务的能力。