《高可用的HDFS》——元数据解析

元数据有三类信息:

1、文件和目录自身的属性信息

2、记录文件内容存储相关信息

3、记录hdfs中所有DataNode的信息


INode:文件和目录是文件系统的基本元素,hdfs将其抽象为INode,每一个文件或目录都对应一个唯一的INode,其存储了名字信息、创建时间、修改时间、父目录等信息。

INode信息完全位于内存,类FSImage是构建在内存元数据与磁盘元数据文件之间的桥梁,在HDFS初始化时,它负责将磁盘元数据转化为内存元数据中的INode,需持久化时,他负责将元数据操作转化为日志记录并保存。


元数据镜像文件(FSImage)+日志文件(edits)的备份机制,其中镜像文件是某一时刻内存数据的真实组织情况,而日志文件则记录了该时刻以后所有的元数据操作。


HDFS元数据三大关键类:

INode:文件系统基本元素:文件和目录             FSDirectory类

BlockInfo:文件内容对象             BlockManager类

DatanodeDescriptor:具体存储对象              DatanodeDescriptor类


FSNamesystem代表总的元数据,对外提供统一的元数据操作接口


hdfs格式化:对文件系统进行初始化

1、确定能否格式化

命令hdfs namenode formate的入口类为类NameNode的main函数,主要方法createNomeNode,该方法根据输入参数来决定执行动作,对于格式化操作,将调用format方法,在format方法中,将遍历所有元数据存储目录,提示用户是否允许对其格式化

2、创建元数据文件在内存中的镜像

包括:

          类FSNamesystem实例化对象,代表整个hdfs的Namespace,类FSDirectory代表了hdfs中所有的目录结构和属性。

          类FSImage的实例化对象,对应元数据的磁盘文件fsImage,类FSEdit实例化对象对应元数据的磁盘文件edits。

3、对内存镜像中的数据结构进行初始化

主要由FSImage的format函数完成,初始化对象也主要是FSImage类的成员变量。

包括namespaceID,在namenode整个生命周期都不变,当datanode注册到namenode后,会获得该namenode的namespaceID,并作为后续的与Namenode通信的身份标识。

4、将内存中的镜像写入元数据备份目录

类FSImage初始化之后,会遍历所有元数据存储目录,以存储目录作为参数,一次调用format方法,format方法采用了重载的方法

首先是删除当前存储目录下的所有内容,然后对传入的目录类型做判断,若是存储FSImage文件的目录,或是存储Edits日志文件的目录。最后调用sd.write()方法在存储目录下创建fsimage和VERSION文件,后者通常在存储目录更新的最后写入,

你可能感兴趣的:(Hadoop)