一、什么是租约
租约(Lease)是一种广泛应用与分布式系统领域的协议,主要用来维护分布式系统的一致性
在HDFS中,当每次客户端用户往某个文件中写入数据的时候,为了保持数据的一致性,此时其它客户端程序是不允许向此文件同时写入数据的。那么HDFS是如何做到这一点的呢?答案是租约(Lease)。换句话说,租约是HDFS给予客户端的一个写文件操作的临时许可证,无此证件者将不被允许操作此文件。
二、HDFS租约模型和内部机制
HDFS租约的相关定义
1:每个客户端用户持有一个租约
2:每个租约的保护持有者信息,还有此租约对应的文件Id列表,表示当前租约持有者正在写这些文件Id对应的文件
3:每个租约内包含有一个最新近更新时间,最近更新时间将会决定此租约是否已过期。过期的租约会导致租约持有者无法继续执行写数据到文件中,除非进行租约的更新
LeaseManager,LeaseManager是租约的管理者,运行于HDFS-Server端,其主要功能特性有
*维护了DFSClient和Lease的映射关系
*维护了filePath和Lease的映射关系
*对租约进行生命周期和状态的管理:
>创建租约或正常情况下的销毁租约
>赋予(或撤销)FilePath权限给租约
>接受续约请求,对租约进行续约处理
>对超过hardLimit的租约进行销毁处理
dfs.namenode.lease-recheck-interval-ms默认值2000
这个监听任务每隔2s执行一次检查
满足一下3个条件,则进入租约释放操作
1、如果租约队列不为空
2、租约队列中最老的租约已经出现了超时(这个就是我们所说的“硬限制则”是考虑到文件close时未来得及释放lease的情况强制回收租约1个小时)
3、没到租约检测的最大时间期限(dfs.namenode.max-lock-hold-to-release-lease-ms默认25)
计算公式monotonicNow()- start > 25(dfs.namenode.max-lock-hold-to-release-lease-ms)
总结
在softLimit期限内,该客户端拥有对这个文件的独立访问权,其他客户端不能剥夺该客户端独占写这个文件的权利。
softLimit过期后,任何一个客户端都可以回收lease,继而得到这个文件的lease,获得对这个文件的独占访问权。
hardLimit过期后,namenode强制关闭文件,撤销lease。
软租约每隔60s就失效,
判断软件租约的逻辑
lastUpdate有客户端每隔1s更新一次
softLimit :值是60 * 1000 1分钟
三、总结lease流程
补充一点:
clientName的生成逻辑
如: DFSClient_NONMAPREDUCE_-1110465581_12
源码 :clientName="DFSClient_"+dfsClientConf.taskId+"_"+ DFSUtil.getRandom().nextInt() +"_"+ Thread.currentThread().getId();也就是lease模型的holder里面的
声明:有的资源来自网络转载,版权归原作者所有,如有侵犯到您的权益请联系邮箱:我们将配合处理!
原文地址:hadoop租约原理介绍发布于2021-11-26 09:17:01