NameNode
- FSNamesystem
// 包括三个守护线程
private void initialize(NameNode nn, Configuration conf){
// 心跳监控
this.hbthread = new Daemon(new HeartbeatMonitor());
// 租约管理
this.lmthread = new Daemon(leaseManager.new Monitor());
// 复制文件块
this.replmon = new ReplicationMonitor();
this.replthread = new Daemon(replmon);
}
// NameNode 接收到 DataNode 的 block 回复后,更新等待列表和 block 位置信息。
pendingReplications.remove(block);
addStoredBlock(block, node, delHintNode );
-
PendingReplicationBlocks:保存当前正在复制的块的状态。守护线程 PendingReplicationMonitor 记录复制超时的块。
- PendingBLockInfo,用来记录正在复制的副本数量,每复制好一个就减一个,减到 0 就复制好了。
-
ReplicationMonitor:定期启动复制工作
- UnderReplicatedBlocks:保存当前需要复制的块的状态。根据一个块的现有状态(当前副本数,失联副本数,预期副本数)设定优先级,共有三个优先级。
- computeDatanodeWork():计算 DataNode 的任务,