BlocksMap源码分析

来源:互联网 发布:淘宝吉光片羽家怎么样 编辑:程序博客网 时间:2024/06/07 02:09

        BlocksMap,主要功能是保存block和其元数据的映射,block的元数据为它所在的INode和存储该block的DataNode。Block对象记录了blockid、block大小以及时间戳信息。block->DataNode的信息没有持久化存储,而是NameNode通过DataNode的blockReport获取该block所在的DataNode List。block的元数据对应的类为BlocksMap#BlockInfo。下面我们将对BlockInfo进行详细分析。

        BlockInfo继承了Block, 它包括privateINodeFileinode 和 Object[] triplets 等成员变量。INodeFile inode表示该block对应的INode节点;triplets为三元组,block有几个副本,就有几个三元组, this.triplets = new Object[3*replication]。三元组的第一个元素表示该block所属的DataNode,类型是DatanodeDescriptor,通过它可以获得block->DataNode list,对应的函数为DatanodeDescriptor getDatanode(int index)。DataNodeDescriptor有一个重要的内部类BlockTargetPair,该类主要保存一个block和其对应的一组DatanodeDescriptor。第二、三个元素表示该block所在DataNode上的前/后一个block(前驱和后继),类型是BlockInfo,对应的函数为BlockInfo getPrevious(int index), BlockInfo getNext(int index)。通过它可以获得DataNode->blocks。借助这个三元组可以找到该block所属的所有DataNode,也可以通过三元组的后两个元素信息找到该block所在DataNode上所有的block。

      下图为BlocksMap的结构。假设该文件有3个副本。

 

原创粉丝点击