namenode上块管理--BlockMap
BlockInfo继承自Block类,是块的信息类,含以下变量:
private INodeFile inode;//块所在的文件(在INodeFile中有INodeFile.blocks表示构成此文件的所有块)
private Object[] triplets;//此块所在的Datanodes三元组,类似于双向链表
triples的赋值方法:
BlockMap.removeBlock(BlockInfo)用于将BlockInfo删除整个块。为了删除整个块,需要将每个副本从其所在的Datanode中删除,最后从map删除。 void removeBlock(BlockInfo blockInfo) { if (blockInfo == null) return; blockInfo.inode = null; for(int idx = blockInfo.numNodes()-1; idx >= 0; idx--) { DatanodeDescriptor dn = blockInfo.getDatanode(idx); dn.removeBlock(blockInfo); // remove from the list and wipe the location } map.remove(blockInfo); // remove block from the map }