《[计算机]HDFS文件系统结构解析》由会员分享,可在线阅读,更多相关《[计算机]HDFS文件系统结构解析(5页珍藏版)》请在金锄头文库上搜索。
1、HDFS 文件系统结构解析NameNode 节点是就是 HDFS 的大脑。想了解 HDFS 文件系统,必须了解大脑结构。 咱们就从 NameNode 节点开始。NameNode 类中,关于 HDFS 文件系统的存储和管理都交给了 FSNamesystem 负责。下面介绍一下FSNamesystem 的逻辑组成和类图。 1. FSNameSystem 层次结构 一些概念 INode: 它用来存放文件及目录的基本信息:名称,父节点、修改时间,访问时间以及 UGI 信息等。 INodeFile: 继承自 INode,除 INode 信息外,还有组成这个文件的 Blocks 列表,重复因子,Block
2、 大小 INodeDirectory:继承自 INode,此外还有一个 INode 列表来组成文件或目录树结构 Block(BlockInfo):组成文件的物理存储,有 BlockId,size ,以及时间戳 BlocksMap: 保存数据块到 INode 和 DataNode 的映射关系 FSDirectory:保存文件树结构,HDFS 整个文件系统是通过 FSDirectory 来管理 FSImage:保存的是文件系统的目录树 FSEditlog: 文件树上的操作日志 FSNamesystem: HDFS 文件系统管理 这些概念之间的层次关系: 我们都知道,在 NameNode 内存中存在
3、两张很重要的映射表: 1. 文件系统的命名空间(文件目录树) 主要是 文件和 Block 映射关系 (保存在 FSDirectory) 2. Block 和 INodeFile & DataNode 的映射关系 (保存在 FSNamesystem) 在上图中,左边黑线部分是 1 数据结构的层次关系;红线部分是 2 关系的层次结构 (其中 block & DataNode 这个共用) 下面详细的介绍上图所表示的关系: 文件系统 FSNamesystem FSNamesystem 主要有两个对象:文件系统(FSDirectory)根节点 rootDir 和 BlocksMap 映射表 (Block
4、 - INode, datanodes, self ref ) 文件系统目录 FSDirectory 保存文件目录结构(INodeDirectory 树),实现 FSImage 和 FSEditLog 操作实现。 INode ( INodeFile & INodeDirectory ) 在 HDFS 中,无论目录还是文件,都是 INode。INode 有两个派生类 INodeFile 和 INodeDirectory。 INodeFile 是 INode 文件类,INodeDirectory 是 INode 目录类。每一 INodeDirectory 孩子节点都是由INodeDirectory
5、 目录或 INodeFile 文件列表构成。这样就形成了一棵 INode 树形结构。 NameNode 内存中保存着 HDFS 整个文件系统形成的树,这棵树保存在 FSDirectory 对象内。 Block & BlocksMap & BlockInfo HDFS 物理存储单元是 Block(缺省的 Block 大小为 64M),每个 Block 会有几个副本( 缺省是 3 个),这些 Block 都是存储在不同数据节点上的。映射关系保存在 BlocksMap。 Block & INodeFile 每个 INodeFile 都有一个 Block 列表组成。每一个 block 有多个副本 (缺
6、省 3 个副本), 各副本保存在不同的数据节点上。 这样在文件与 Block 和 DataNode 之间形成一个映射关系表。这张关系表就保存在 FSDirectory 对象 . FSImage & FSEditlog(FSDirectory) 由于目录树(FSDirectory)在 NameNode 内存中保存,机器也有掉电的时候。若只保存在内存那势必会造成数据的丢失。因此,系统会周期性的保存文件目录树到 NameNode 本地文件系统,生成 FSImage。主要由 FSImage和 FSEditLog,这两个类负责目录树持久化。 当 HDFS 系统非常庞大时,FSImage 也会非常大,这样
7、不能文件系统发生任何操作时,就更新到 FSImage,所以一段时间内文件系统的操作日志会记录到 FSEditLog。到一定时间会把操作日志 FSEditLog 同步到 FSImage,这样就形成完整的文件目录树。 2. FSNameSystem 主要类关系图 这个类图可以分成三个部分 Bock 相关的部分(BlocksMap & BlockInof & Block) INode 相关的部分 (INode & INodeDirectory & INodeFile & INodeDirectoryWithQuota) FSImage & FSEditLog (Storage & StorageInfo) 其中 BlockInfo 是 Block 的加强类,增加了 INodeFile 的引用和 DataNode 列表 INodeFirectoryWithQuota 是 INodeDirectory 的增强类,增加了 Quota 限制功能 从层次关系图和类图中,可以看出 FSNamesystem 中各数据结构之间的关系。了解 FSNamesystem, 那么 HDFS的文件系统就了解了 90%。 my email: hadoop123 at gmail dot com