Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 当数据节点关闭时,名称节点如何决定存储在数据节点中的不同数据块?_Hadoop_Hdfs - Fatal编程技术网

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

Hadoop 当数据节点关闭时,名称节点如何决定存储在数据节点中的不同数据块?,hadoop,hdfs,Hadoop,Hdfs,让我们假设某个数据节点发生故障,那么它将停止发送心跳。现在,name节点已经知道这个特定的数据节点不再存在于网络中。名称节点必须再次创建块来维护复制因子。name节点如何知道死数据节点上存在块的所有不同副本。如果它将开始在FSImage上迭代,那么肯定会是一个非常长的过程,并且需要很长时间。那么,名称节点要知道死数据节点上存储的不同数据块的确切过程是什么呢?DataNode每隔固定的时间(默认设置为2160000毫秒)发送块报告。 Block report包含有关块的信息,其中包含:块ID、块长

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

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

块映射保存在内存中,因此可以很快找到故障主机上的所有块


不过,它是大小映射的函数,不超过4gb。

NameNode定期从集群中的每个数据节点接收心跳信号和块报告。接收到心跳信号意味着DataNode运行正常

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

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