HDFS(5)|青训营笔记

124 阅读2分钟

数据节点管理

数据节点启动时,会密集和名字节点通信,握手、注册并进行数据块上报,然后定期发送心跳信息,维护和名字节点的联系。

  • 添加和撤销数据节点

HDFS在需要增加集群容量时,可以动态地往集群添加新的数据节点。相反,如果希望缩小集群的规模,那么需要撤销已存在的数据节点。如果一个数据节点频繁地发生故障或者运行缓慢,也可以通过撤销操作,将节点下架。在实现上述功能时,需要保证名字节点对能够连接到名字节点的数据节点进行明确的管理,以保证数据节点受集群控制,也可以防止配置错误的数据节点误接入名字节点。

  • 数据节点的启动

添加数据节点并启动节点时,执行的流程和正常的数据节点启动是一样的。需要和名字节点握手、注册和数据块上报。如果系统支持Append操作,还需要上报处于客户端写状态的数据块信息。

  • 心跳

在DataNode.offerService()中,数据节点利用循环向名字节点发送心跳信息,维护它们间的关系,上报负载信息并获取名字节点指令。由上述描述可知,名字节点中和数据节点心跳相关的代码可以分为两部分,心跳信息处理和心跳检查。

心跳信息处理分为三个部分,首先是对发送请求的数据节点进行检查,判断该节点是否能连接到名字节点。同时也判断数据节点是否已经注册过,未注册的数据节点会收到DatanodeCommand.REGISTER指令,这时,节点要重新注册并上报数据块信息。名字节点利用心跳信息中的负载信息,更新整个HDFS系统的负载信息。名字节点会为这个数据节点产生名字节点指令,并通过远程调用的返回值返回。