HDFS文件系统源码总结

NameNode节点是就是HDFS的大脑。想了解HDFS文件系统,必须了解大脑结构。 咱们就从NameNode节点开始。NameNode类中,关于HDFS文件系统的存储和管理都交给了FSNamesystem负责。下面介绍一下FSNamesystem的逻辑组成和类图。 
 


 
 FSNameSystem层次结构 
INode:  它用来存放文件及目录的基本信息:名称,父节点、修改时间,访问时间以及UGI信息等。
INodeFile: 继承自INode,除INode信息外,还有组成这个文件的Blocks列表,重复因子,Block大小
INodeDirectory:继承自INode,此外还有一个INode列表来组成文件或目录树结构
Block(BlockInfo):组成文件的物理存储,有BlockId,size ,以及时间戳
BlocksMap: 保存数据块到INode和DataNode的映射关系
FSDirectory:保存文件树结构,HDFS整个文件系统是通过FSDirectory来管理
FSImage:保存的是文件系统的目录树
FSEditlog:  文件树上的操作日志
FSNamesystem: HDFS文件系统管理 
 
概念之间的层次关系:

 
 
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%。 
 
 一下为其他重要信息说明:
 
1.2.1、元数据节点文件夹结构

image

  • VERSION文件是java properties文件,保存了HDFS的版本号。   

    layoutVersion是一个负整数,保存了HDFS的持续化在硬盘上的数据结构的格式版本号。 

    namespaceID是文件系统的唯一标识符,是在文件系统初次格式化时生成的。 

    cTime此处为0 

    storageType表示此文件夹中保存的是元数据节点的数据结构。

    namespaceID=1232737062

    cTime=0

    storageType=NAME_NODE

    layoutVersion=-18

     

1.2.2、文件系统命名空间映像文件及修改日志

hadoop01

1.2.3、从元数据节点的目录结构

image

1.2.4、数据节点的目录结构

image

  • 数据节点的VERSION文件格式如下:

namespaceID=1232737062

storageID=DS-1640411682-127.0.1.1-50010-1254997319480

cTime=0

storageType=DATA_NODE

layoutVersion=-18

 

  • blk_<id>保存的是HDFS的数据块,其中保存了具体的二进制数据。 

  • blk_<id>.meta保存的是数据块的属性信息:版本信息,类型信息,和checksum 

  • 当一个目录中的数据块到达一定数量的时候,则创建子文件夹来保存数据块及数据块属性信息。

 

二、数据流(data flow) 2.1、读文件的过程

image

2.2、写文件的过程

image

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值