之前看了HDFS代码,做了一些整理,陆续贴上来,Namenode中最重要的结构是Namespace和BlocksMap,先把BlocksMap写一下。
BlocksMap里面最重要的一个结构是BlocksInfo,先来看一下BlocksInfo
1. Class BlocksInfo extends Block
Block类有三个变量,分别是long blockId; 每个block的id值,唯一的
long numBytes; block的大小
long generationStamp; 时间戳,在修改和append有用
BlockInfo在Block的基础上加入了INodeFile inode; 代表此block对应文件INodeFile
Object[] triplets; 三元组结构,其结构如下
[img]http://dl.iteye.com/upload/attachment/435032/c5f90749-95e8-3877-bd45-e49fd59772b4.bmp[/img]
其中,对于副本个数为replica的三元组,其i*replica对应的是该block对应的Datanode对象,保存了其Datanode位置的信息,i*replica+1和i*replica+2为该block对应的Datanode对象上面其他block对象,即形成了一个链表结构。三元组是为了减少内存消耗。
下面是BlockInfo中的重要方法:
1) BlockInfo(Block blk, int replication)
构造函数,设定该blockInfo对象的block属性,同时根据设定的replication对三元组初始化。
2) DatanodeDescriptor getDatanode(int index)
获得三元组中对应副本的Datanode对象,使用的方法是
DatanodeDescriptor node = (DatanodeDescriptor)triplets[index*3];
3) BlockInfo getPrevious(int index)
获得该副本所在Datanode上面前一块BlockInfo对象(链表结构)
方法是:
BlockInfo info = (BlockInfo)triplets[index*3+1];
4) BlockInfo getN
BlocksMap里面最重要的一个结构是BlocksInfo,先来看一下BlocksInfo
1. Class BlocksInfo extends Block
Block类有三个变量,分别是long blockId; 每个block的id值,唯一的
long numBytes; block的大小
long generationStamp; 时间戳,在修改和append有用
BlockInfo在Block的基础上加入了INodeFile inode; 代表此block对应文件INodeFile
Object[] triplets; 三元组结构,其结构如下
[img]http://dl.iteye.com/upload/attachment/435032/c5f90749-95e8-3877-bd45-e49fd59772b4.bmp[/img]
其中,对于副本个数为replica的三元组,其i*replica对应的是该block对应的Datanode对象,保存了其Datanode位置的信息,i*replica+1和i*replica+2为该block对应的Datanode对象上面其他block对象,即形成了一个链表结构。三元组是为了减少内存消耗。
下面是BlockInfo中的重要方法:
1) BlockInfo(Block blk, int replication)
构造函数,设定该blockInfo对象的block属性,同时根据设定的replication对三元组初始化。
2) DatanodeDescriptor getDatanode(int index)
获得三元组中对应副本的Datanode对象,使用的方法是
DatanodeDescriptor node = (DatanodeDescriptor)triplets[index*3];
3) BlockInfo getPrevious(int index)
获得该副本所在Datanode上面前一块BlockInfo对象(链表结构)
方法是:
BlockInfo info = (BlockInfo)triplets[index*3+1];
4) BlockInfo getN