最近在研究HDFS源码,个人感觉很难,头发都快要掉光了O__O "…
一、文件系统目录树 (HDFS第一关系)
HDFS的目录和文件在内存中是以一棵树的形式存储的,这个目录树是由NameNode维护的,NameNode会修改这个树形结构以对外提供添加、删除文件等操作。文件系统目录树还保存着HDFS文件与数据块的对应关系。
不管是文件还是目录,在文件系统目录树中都被看作是一个INode节点。如果是目录,则其对应的类是INodeDirectory;如果是文件,则其对应的类是INodeFile。INodeDirectory中包含一个成员集合变量children,如果该目录下有子目录或者文件,其子目录或文件的INode引用就会被保存在children集合中。HDFS通过这种方式维护整个文件系统的目录结构。
INode是抽象类,保存了HDFS目录和文件的所有共同属性,包括当前节点的父节点的INode对象的引用、文件、目录名、用户组、访问权限等。需要注意的是,INode类的设计采用了模板模式。INode类定义的方法多为2个,一个是final的接口方法,用于规范接口的调用;另一个是abstract抽象方法,抽象方法留给子类具体实现。INode类中只有一个字段,就是parent,表名当前INode的父目录。
INodeWithAdditionalFields类定义了id、name、permission等字段,并覆盖了INode抽象方法。其中permission字段是64位的long类型的,保存用户信息、用户组信息和权限信息。HDFS中用户名和用户标识的对应关系、用户组名和用户组标识的对应关系都保存在SerialNumberManager类中,通过SerialNumberManager类,名字节点不需要在INode