HDFS数据块恢复算法的思考

HDFS数据块恢复算法的触发时机有2处:
一处是FSNamesystem.internalReleaseLease(Lease lease, String src);(租约恢复算法)
一处是Client写pipeline时某个Datanode出现错误而触发,具体见DFSClient.processDatanodeError()。

FSNamesystem.internalReleaseLease(Lease lease, String src)是由于租约的软/硬超时而调用,那为什么又要分软超时和硬超时两种呢?
个人见解(太久没看HDFS代码了所以生疏了不少,欢迎大家补充指正):
软超时的发生时机是Client要create或append一个文件,这个文件已经在Namenode的lease列表了,就会去检查这个lease是否软超时,若软超时就触发租约恢复算法;
硬超时的发生时机是Namenode上的LeaseChecker线程不断扫描lease列表,若lease的更新超过硬超时时间,则触发租约恢复算法;
注意软超时是要有Client去create或append一个文件时才会去判断,若没有Client去做这样的操作,则只有由Namenode去发现超时的lease,所以有软/硬超时。

Hadoop代码版本:0.20.2

你可能感兴趣的:(算法,hadoop,String)