
1.1 HDFS结构图
1. 数据块Block:
典型的Linux的数据块是4M,HDFS的默认数据块是64M。一般存在3个备份。
2. 索引节点INodeFile:
LinuxFS每个文件以及目录都是由一个INode代表。
中HDFS,INodeFile是目录树的单元,HDFS的目录树是在INode的集合上生成的。分为两种:
1) 指向一组Block,没有子INodeFile。
2) 指向一组INodeFile。
3. 目录项INodeDirectory:
按照参考论文[1]来看,HDFS是没有目录项的。具体差别待补充。
HDFS设计的侧重点:
1) 节约NameNode的内存空间,HDFS没有Dentry。
2) 节约NameNode的外存空间,INodeDirectory没有以一组Block的形式存储在外存。
数据块映射

LinuxFile用户空间与物理空间
从图中可以看出,其存在与一个强依赖的关系。

HDFS用户空间与物理空间
上图可以看出,减弱了物理层与用户层的依赖程度。HDFS的物理存储介质是一组DataNode,而不是某台确定的计算机,文件与DataNode群之间的关系由系统来管理。
从左往右是文件存储的方式,逆向的是文件被读取的时候的过程
Map1: <Block INodeFile>
Map2: <Block DataNode>
这两组映射封装在BlocksMap<Block BlockInfo>,以哈希映射实现,作为描述Block的重要元数据Blockinfo封装了该Block相关的Inode,DataNode。
Map3 <INode Block>(Map1逆向),作为目录树的最底层存放在FSImage。
Map4<DataNode Block>(Map2逆向),DataNodeDescriptor中定义的BlockList。
[1]. 分布式文件系统HadoopHDFS与传统文件系统LinuxFS的比较与分析。
浙公网安备 33010602011771号