HDFS学习笔记 【Namenode/DN管理】

说明

DN管理管理了什么?
NN上如何表示DN
DN存储和块的关系
梳理DatanodeManager存储类
HDFS学习笔记 【Namenode/DN管理】_第1张图片

DatanodeDescriptor

DN的抽象,依次继承。每一层增加一点额外的信息。
DatanodeId
基本的DN信息,hostname,数据传输接口,info服务端口,ipc端口等。
DatanodeInfo
补充一些DN信息,比如容量,缓存,以及xceiver数量等,软件版本,以及dn状态等。
DatanodeDescriptor
补充一些状态相关的信息,负载,指令,缓存相关的信息
指令相关的信息,比如带宽,复制块,恢复块
缓存相关的参数,多个队列保存已缓存,等待缓存的,等待取消缓存的块。

DatanodeStorageInfo

存储抽象,管理blockList,管理block的状态。
blockList 保存所有所有的Block头节点。BlockInfo.triplets保存的是所有副本块的双向链表

字段

NN状态相关
heartbeatsinceFailOver: NN是否出现失败
blockContensStale:是否处于stale状态,bool类型
防止数据不完整

NN里面存储的和DN相关的信息

元数据相关
dn,storageId,storagetype,state字段用于描述存储的元信息
storage状态信息,用于描述存储的容量相关信息

方法

  • addBlock()
    DN向NN汇报新数据块,DatanodeStorageInfo信息加入到Blocks中
    DatanodeStorageInfo中维护blocks列表,里面包含了所有的快信息
  • maskStaleAfterFailOver()
    在HA切换时,将DatanodeStorageInfo设置为false状态。

DataNodeManager

NN管理Datanode,负责管理DN的添加和删除,dn启动,以及dn的心跳响应。
HDFS学习笔记 【Namenode/DN管理】_第2张图片

数据结构

  • NS
  • BLockManager
    DNNodeManager需要可以访问它保存的Block结构
  • heartbeatManager
    心跳管理模块
  • dataNodeMap
    storageId和datanodeDescriptor的映射,所以datanodeManager中维护着所有的DN,进一步可以找到所有的块信息
  • host2DatanodeMap
    hostname和datanodeDescriptor的映射

datanodeDescriptor中包含了blocks列表

  • networktopology
    整个网络拓扑

添加和撤销datanode

添加dn意味着什么?

首先是创建datanode的描述符,获取datanode的所有的块信息,维护数据结构(block->datanodeDescriptor,datanodeDescriptor->blocks),
哪些dn可以心跳,可以汇报块
nn知道dn的容量,线程等信息,可以下发任务
维护dn的任务队列,需要复制的块,坏块,恢复快等。

如何添加dn/下线dn

  1. 配置文件中增加或者下线节点
  2. 发送refresh命令,最终执行的是datanodeManager的refresh。
    2.1 调用hbManager,改变下dn状态即可.
    2.2 线程周期检查节点是否完成下线。
  3. 修改datanodeDescriptor状态

dn具有维护模式,下线,正常等多个状态

如何检查是否下线
checkDecommissionState
BlockManager包含有几个队列,维护excessRedundancyMap,neededReconstruction,pendingReconstruction等等。
猜测是线程检测队列,修改node状态。
dn如何启动

  1. 握手
  2. 注册 datanodeMap
    注意datanode可以多次注册,以storage为准
  3. 块上报
    维护内存中的块和dn存储之间关系
    3.1 全量上报
    首次上报,直接增加block内存结构
    3.2 增量上报

如何心跳
心跳信息: DN容量,线程,缓存,连接数等。
处理信息: handleHeartbeat 通过datanodeDescriptor信息,块和存储信息等构造命令组
心跳返回: 命令组

dn也具有多个队列,比如说需要复制的块,需要删除的块,需要恢复的块。这些是通过BlockManager生成的。

你可能感兴趣的:(大数据,Hadoop,hdfs,笔记)