BlocksMap源码分析

本文深入探讨HDFS中BlocksMap的作用及其核心组件BlockInfo。BlocksMap用于保存block与元数据映射,BlockInfo则记录了block的INode、DataNode信息及副本详情。通过BlockInfo中的三元组可以维护DataNode间的block链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

        BlockInfo继承了Block, 它包括privateINodeFile inode 和 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个副本。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值