HDFS源码学习(7)——Block管理
18 October 2012
HDFS通过一个BlockManager管理集群中所有的block信息
##主要数据结构 ###Block Block是HDFS读写的基本单元,集群中每个block通过一个long id来唯一标示。
###BlockInfo 维护一个block的元信息,主要通过 ###BlockMap 通过一个GSet<Block, BlockInfo>维护一个block与其元数据信息的映射关系,元信息包括其所属的BlockCollection和存储该block的datanode节点,每个BlockMap有个初始容量capacity
###BlockCollection
##Block和副本管理 ###Block和副本状态 Block有如下状态:
- committed:所有的副本已经被创建且更新至最新
- Under construction: 需要创建一个或多个副本
- To be deleted: 所有副本需要被删除。发生在文件被删除或者block被重写
- Over-replicated: 过多的副本存在。此时副本中的一个需要设置为无效并删除。
副本有如下状态:
- Current: 正常状态,该副本正确反应block内容
- Conrrupt: 某个副本损坏。副本损坏是由client报告给namenode的。client通过checksum检查副本是否损坏,如果损坏了,通过BlockManager.invalidateBlock()处理
- On a faild DataNode: DataNode Heartbeat发现有DataNode失效时,即将在改datanode上创建的副本将被删除
- Out of Date: 当Datanode失效,且副本所属的block发生更新后,Datanode恢复正常。过期的block将通过blockreport报告给namenode,并将其删除
- Under construction: 副本尚未被写入并在Datanode上被验证。在NameNode看来,只有当收到blockReport并且报告中timestamp正确时,猜人物副本写入正常。
##Block分配
##Block查询
blog comments powered by Disqus