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 内存