DataNode:
DirectoryScanner:
主要作用:block数据路径扫描
BlockScanner:
主要作用:block文件扫描,文件内容crc校验
BlockPoolManager:
成员:
startAll():启动所有BPServiceActor线程。
List<BPOfferService> offerServices:保存所有BPOfferService對象,每個對象對應一個BlockPoolId(namespace),每個BlockPoolId對應一個Active NameData服務。
BPOfferService:
成员:
BPServiceActor bpServiceToActive: 一个namespace只有一个Active的NameNode,此BPServiceActor 与对应的active NameNode通讯
List<BPServiceActor> bpServices:保存一个BPServiceActor与Active NameNode和多个standby NameNode。
BPServiceActor:
主要作用:保持和對應NameNode之間的心跳。
成員:
DatanodeProtocolClientSideTranslatorPB:與NameNode通信的RPC實現。
connectToNNAndHandshake():建立與NameNode的鏈接
Scheduler:用來調度心跳和blockReport的發送,heartbeatIntervalMs(心跳間隔),lifelineIntervalMs(),blockReportIntervalMs(block報告間隔),outliersReportIntervalMs();
blockReport():向對應BlockPoolId 活躍的NameNode發送一串block報文。并返回NameNode給DataNode的命令. 調用棧run->offerService->blockReport。發送内容StorageBlockReport
sendHeartBeat():向對應BlockPoolId 活躍的NameNode發送心跳包。 調用棧run->offerService->sendHeartBeat(). 發送的心跳内容StorageReport。
StorageReport{
private final DatanodeStorage storage;
private final boolean failed;
private final long capacity;
private final long dfsUsed;
private final long nonDfsUsed;
private final long remaining;
private final long blockPoolUsed;
}