一、概述

二、架构设计

2.1. BlockPoolManager

在 HDFS Federation 部署中,一个 HDFS 集群可以配置多个命名空间,每个 Datanode 都会存储多个块池的数据块。在 Datanode 实现中,定义了 BlockPoolManager 类来管理 Datanode 上的所有块池,Datanode 的其他模块对块池的操作都必须通过 BlockPoolManager 执行,每个 Datanode 都有一个 BlockPoolManager 的实例。

BlockPoolManager 逻辑结构图如图 4-29 所示。由于在 HDFS Federation 部署中,一个
Datanode 会保存多个块池的数据块,所以 BlockPoolManager 会拥有多个 BPOfferService 对象,
每个 BPOfferService 对象都封装了对单个块池操作的 API。同时,由于在 HDFS HA 部署中,
每个命名空间又会同时拥有两个 Namenode,一个作为活动的(Active) Namenode,另一个作
为热备的 (Standby) Namenode, 所以每个 BPOfferService 都会包含两个 BPServiceActor 对象,
每个 BPServiceActor 对象都封装了与该命名空间中单个 Namenode 的操作,包括定时向这个
Namenode 发送心跳(heartbeat)、增量块汇报(blockReceivedAndDeleted)、全量块汇报
(blockreport)、缓存块汇报(cacheReport),以及执行 Namenode 通过心跳/块汇报响应传回的
名字节点指令等操作。