Datanode结构可划分为3个层
DN拥有一个BlockPoolManager实例(用于管理多个块池,一个名称空间只有一个块池),BlockPoolManager拥有多个BPOfferService对象(每个对象都封装对单个块池的api),对于BPOfferService对象的创建、移除、启动、停止等操作必须通过类BlockPoolManager的API来完成,每个BPOfferService拥有两个BPServiceActor,每个BPServiceActor封装对单nn的操作,周期性向Namenode发送心跳、 块汇报、 增量块汇报以及缓存汇报, 同时执行Namenode发回的指令等等
总而言之,就是该服务负责与NN交互,通过BlockPoolManager实现对块池的操作。
由于时间关系就不详细进入各个方法,这是总结的源码流程



