FSNamesystem中有几个非常重要的变量,对于理解NameNode的实现具有重要意义。下面,我们看一下这几个变量和他的作用。
lblocksMap:blocksMap是类BlocksMap的实例,其代表了Block→{INode、datanodes}的映射。具体代表了每一个Block在哪一个DataNode上存储。
datanodeMap:datanodeMap是类NavigableMap的实例,代表了datanode→block之间的映射关系。该map的key是StorageID,value是DatanodeDescriptor,即<String, DatanodeDescriptor>。该Map一般在下面三种情况下会被修改:
1.added to the map if it is a new storage id
2.Updated with a new datanode started as a replacement for the old one with the same storage id
3.Remove if and only if an existing datanode is restarted to serve a different storage id
corruptReplicas:corruptReplicas是CorruptReplicasMap的一个实例。corruptReplicas保存了文件系统中所有的损坏block。注意,只有一个block的所有备份存储都损坏才认为该block是损坏的。其保存的形式如下,一个block和所有保存该block的datanode,Block→TreeSet<DatanodeDescriptor>
host2DataNodeMap:host2DataNodeMap是类Host2NodesMap的实例,它保存了主机名到datanode之间的映射关系,即ip:port→DatanodeDescriptor的映射关系。
dir:dir是FSDirectory的实例,他里面包含了INodeFile和INodeDirectory的层次结构。INodeFile和INodeDirectory分别对应硬盘上的文件和目录。每一个INodeFile都包含了该文件所拥有的所有的数据块,即dir保存了file→blocks的映射。