一、概述

Namenode 会定期将文件系统目录树以及文件与数据块的对应关系保存至 fsimage 文件中,fsimage 并不记录数据块和数据节点的对应关系。这部分数据是由 Datanode 主动将当前 Datanode 上保存的数据块信息汇报给 Namenode,然后 Namenode 更新内存中的数据,以维护数据块和数据节点的对应关系。

二、架构设计

三、实现

3.1. 相关类

3.1.1. Block

Block 类用来唯一地标识 Namenode 中的数据块,是 HDFS 数据块最基本的抽象接口。
Block 类实现了 Writable 接口,是可以序列化的。Block 类还实现了 Comparable 接口,按照 blockid 大小排序。

Block 类定义了三个字段:① blockId 唯一地标识这个 Block 对象;② numBytes 是这个
数据块的大小(单位是字节):③ generationStamp 是这个数据块的时间戳(联想
GenerationStamp 这个类)。

Block

3.1.2. BlockInfoContiguous

3.1.3. BlockInfoContiguousUnderConstruction