在向HDFS中写数据的时候,当写某一副本时出错怎么处理?

在向HDFS中写数据的时候,当写某一副本时出错怎么处理?

1.首先会关闭管线。

2.将已经发送到管道中但是没有收到确认的数据包重新写回数据队列,这样无论哪个节点发生故障,都不会发生数据丢失。这个过程是在确认队列中将未收到确认的数据包删除,写回到数据队列。

3.然后当前正常工作的数据节点将会被赋予一个新的版本号(利用namenode中租约的信息可以获得最新的时间戳版本),这样故障节点恢复后由于版本信息不对,故障DataNode恢复后会被删除。

4.在当前正常的datanode中根据租约信息选择一个主DataNode,并与其他正常DataNode通信,获取每个DataNode当前数据块的大小,从中选择一个最小值,将每个正常的DataNode同步到该大小。然后重新建立管道。

5.在管线中删除故障节点,并把数据写入管线中剩下的正常的DataNode,即新的管道。

6.当文件关闭后,namenode发现副本数量不足时会在另一个节点上创建一个新的副本。

转载于:https://my.oschina.net/134596/blog/1647115