Hadoop学习笔记(四)

关于HDFS元数据的学习:

  HDFS的元数据管理策略是FSImage+Editlog,采用元数据镜像文件FSImage保存某一时刻内存元数据的真实组织情况,而日志文件Editlog则记录了在该时刻以后的所有元数据操作。

  优点:在保证元数据不丢失的前提下,最大程度降低了备份元数据的开销。

  缺点:在HDFS启动时,加载需要一定时间。


 

 

 

元数据的分类:


 

形式上:

  内存元数据和持久元数据

类型上:

1. 文件和目录自身属性信息,包括文件名,目录名,大小,创建时间,修改时间等等;

2. 文件内容存储信息,包括文件分块情况,副本个数,副本所在的Datanode等;

3. DataNode信息,用于Datanode的管理。

 

元数据的整体结构:


 

--类FSNamesystem                      ------代表总的元数据,对外提供统一接口,这些接口的实现由它的成员变量及相关方法组合实现。

------类FSDirectory                       ------实现对Inode的组织和操作,使用到了下面几个类

------|---类FSImage                     ------用于沟通内存和外存之间的桥梁,负责维护内存元数据镜像

------|---类FSEditLog                     ------用于日志记录操作  

------|---类Inode                        在HDFS中,每一个文件和目录都对应唯一的一个Inode,Inode是一个抽象类,定义一些公共变量,有四个Inode子类

------|---|---类INodeDirectory                   代表目录类型的INode       

------|---|---类INodeFile                      代表文件类型的INode

------|---|---类INodeDirectoryWithQuota             是INodeDirectory的子类,代表有配额限制的目录

------|---|---类INodeFileUnderConstruction          是INodeFile的子类,标示正在写入的文件,是一个临时对象

------类BlockManager                   ---封装实现block管理,包含BlockMap对象

------|---类BlockMap                     ---实现HDFS所有Block的管理,构建一张hash表来存储所有的BlockInfo,实现Block的快速检索和其他操作

------|---|---类BlockInfo                   ---每一个Block的信息由BlockInfo来标示  

------类NavigableMap<String,DatanodeDescriptor>      哈希表结构,实现了HDFS中所有Datanode的管理

    -----类DatanodeDescriptor              是类DatanodeInfo的子类,描述Datanode信息的数据结构。

重点说明一下INodeFile和BlockInfo的关系:

在INodeFile中定义了一个BlockInfo类型的数组,表明了该文件所有分块的信息。

而在BlockInfo类中,定义了两个关键成员变量:

① private INodeFile inode;    用来说明该Block所对应的INode节点;

② Object[] triplets;        用来指出该Block对应三个副本所在的Datenode位置,并且可以指出其中某个Datanode中所存在的其他Block

 

现在简述一下大体的文件定位流程:

当一个用户访问某个文件特定偏移量的内容时——

1. HDFS根据路径找到文件对应的INode

2. 根据偏移量计算出Block的位置

3. 在BlockInfo数组中找到对应的BlockInfo

4. 在BlockInfo中triplets找到对应副本的Datanode位置

5. 和该Datanode通信执行操作

更进一步的,我们可以方便的根据triplets来查询所需Block存放的Datanode上的其他所有Block,也可以根据BlockInfo[]来查看该文件所对应的所有Block.

 

 

posted on 2012-08-30 10:46  melburg  阅读(162)  评论(0)    收藏  举报