名称节点如何确定数据节点中存储的不同数据块何时停止?

时间:2018-04-30 10:40:45

标签: hadoop hdfs

假设有些数据节点出现故障,那么它将停止发送心跳。现在,name node已经知道这个特定的数据节点不再在网络中了。 Name节点必须再次创建用于维护复制因子的块。名称节点如何知道在死数据节点上存在块的所有不同副本。如果它将开始迭代FSImage,那么肯定会是一个非常漫长的过程,并且需要很长时间。那么,名称节点遵循的确切步骤是什么,以了解存储在死数据节点上的不同数据块是什么?

3 个答案:

答案 0 :(得分:0)

块映射在内存中维护,因此可以非常快速地找到驻留在故障主机上的所有块。

虽然它是尺寸图的函数,但不超过4gb。

答案 1 :(得分:0)

NameNode定期从群集中的每个DataNode接收Heartbeat和Block报告。收到心跳意味着DataNode运行正常且运行正常。

Blockreport包含DataNode上所有块的列表。当NameNode注意到在一定时间后它没有从数据节点收到心跳消息时,数据节点被标记为已死。由于块将被复制不足,系统开始复制存储在死数据节点上的块。

理解这种情况的最简单方法是当数据节点关闭时,其他数据节点无法知道相邻数据节点存储了什么。根据Namenode指令在数据节点中复制块,而Namenode指令又从其fsimage检查死数据节点的块,这将花费不到5秒的时间来决定要复制的内容。一旦决定复制将需要几分钟才能完成。

答案 2 :(得分:-1)

DataNode会在每个固定的时间内发送块报告(默认设置为21600000毫秒)。 块报告包含有关块的信息,其中包含:块ID,块长度,块生成时间戳,块副本的状态(例如,副本已完成或等待恢复等)