1. 文件系统目录树

INode #

FSEditLog 类 #

Namenode将命名空间的信息记录在fsimage二进制文件中。
fsimage将文件系统目录树中的每个文件或者目录的信息保存了一条记录。那条记录中包括了该文件的名称,大小,用户,用户组修改时间,创建时间等信息。

NameNode重启时会读取这个fsimage文件来重构命名空间

因为fsimage这个文件一般都很大,所以每过一段时间才会更新一次fsimage文件。 新的fsimage文件和上一个fsimage文件的差异,保存在editlog文件中。 HDFS客户端执行的所有写操作,首先会记录到editlog文件中。 HDFS定期将editlog文件与fsimage文件进行合并,保证fsimage跟NameNode内存中记录的命名空间完全同步。

transactionId 机制 #

配置: hdfs-site.xml dfs.namenode.name.dir 配置 fsimage文件和editlog文件的文件夹

FSEditLog 状态机 #

EditLogOutputStream #

EditsDoubleBuffer #

EditLogInputStream 输入流 #

FSEditLog.log*() 方法 #

FSImage #

  • 保存命名空间: 将当前时刻NameNode内存中的命名空间保存到fsimage文件中
  • 加载 fsimage 文件: 将磁盘上fsimage文件中保存的命名空间加载到Namenode内存
  • 加载 editlog 文件: Namenode 加载新的 editlog 到 Namenode 内存

保存命名空间 #