HDFS 中的文件读写为一写多读。写文件时,每一个文件都与一个租约和一个客户端进程相对应。可以理解为一个带过期时间的锁。既可以防止客户端进程长期占有文件但不做操作。也可以防止别的客户端写入。
在客户端崩溃时,打开的文件没有被正确关闭,服务端的锁还在,也没有过期,别的客户端无法打开,需要先调用 recoverLease 把服务端已有的租约关闭,才可以重新打开文件。
这里有个问题,当前客户端正常时,如果有另外一个客户端调用 recoverLease 会发生什么?取决于租约是否软超时,如果软超时了,是可以恢复租约并关闭文件的。
网友评论