hadoop—当数据节点关闭时,名称节点如何决定存储在数据节点中的不同数据块?

bpsygsoo  于 2021-06-02  发布在  Hadoop
关注(0)|答案(3)|浏览(384)

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

1dkrff03

1dkrff031#

namenode定期从集群中的每个datanode接收心跳和块报告。接收到心跳信号意味着datanode运行正常。
blockreport包含datanode上所有块的列表。当namenode注意到它在一段时间后没有从数据节点接收到心跳消息时,该数据节点被标记为死节点。由于数据块的复制不足,系统开始复制存储在死数据节点上的数据块。
理解这种情况的最简单方法是当一个数据节点关闭时,其他数据节点无法知道相邻的数据节点存储了什么。按照namenode指令在数据节点中复制这些块,namenode指令依次从fsimage检查死数据节点的块,这将花费不到5秒的时间来决定要复制什么。一旦决定,复制将需要几分钟才能完成。

bhmjp9jg

bhmjp9jg2#

datanode每固定一段时间(默认设置为2160000毫秒)发送一次块报告。块报告包含有关块的信息,包括:块id、块长度、块生成时间戳、块副本的状态(例如,副本已完成或等待恢复等)

yxyvkwin

yxyvkwin3#

块Map保存在内存中,因此可以很快找到故障主机上的所有块。
不过,它是大小Map的函数,不超过4gb。

相关问题