Hadoop HDFS源码namenode部分概述(一)(3)

将这些信息读入内存之后,构造一个文件目录结构树,将表示文件或目录的节点填入到结构中。

然后是加载datanode信息(新版已取消该项)

再之后是加载FilesUnderConstruction.

BlocksMap:

block->datanode的信息没有持久化存储,而是namenode通过datanode的blockreport获取block->datanode list

BlocksMap负责维护了三种信息:

  block->datanode list

  block->INodeFile

  datanode->blocks

这要归功于一个很牛逼的结构:Object[] triplets

Hadoop HDFS源码namenode部分概述(一)

他是一个三元组,每个block有几个副本,就有几个三元组。三元组的第一个元素表示该block所属的Datanode,类型是DatanodeDescriptor,通过它获得

block->datanode list

第二/三个元素表示该block所在Datanode上的前/后一个block(前驱和后继),类型是BlockInfo,通过它获得datanode->blocks

借助这个三元组可以找到一个block所属的所有datanode,也可以通过三元组的后两个元素信息找到一个datanode上所有的block。

上面这两个结构介绍之后,nn需要的namespace信息和block信息基本就全了。在nn加载fsimage完成之后,BlocksMap中只有每个block到其所属的datanodes list的对应关系信息还没建立。然后通过dn的blockReport来收集构建。当所有的dn汇报给nn的blockReport处理完毕后,BlocksMap整个结构也就构建完成了。

相关阅读:Hadoop HDFS源码namenode部分概述(二)

linux

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/5b9421da4678efcb062d6a03e8a77d4a.html