hadoop租约原理介绍
一、什么是租约
租约(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里面的
我的标签
随笔档案
- 2020-04 (3)
- 2019-09 (2)
- 2019-08 (1)
- 2019-01 (1)
- 2017-09 (1)
- 2017-06 (1)
- 2017-05 (3)
- 2017-03 (1)
- 2017-02 (2)
- 2017-01 (3)
- 2016-12 (2)
- 2016-10 (3)
- 2016-09 (2)
- 2016-08 (3)
- 2016-07 (2)
- 2016-06 (2)
- 2016-05 (3)
- 2016-04 (2)
- 2016-03 (2)
- 2016-01 (3)
- 2015-12 (3)
- 2015-11 (2)
- 2015-10 (3)
- 2015-09 (1)
- 2015-08 (1)
- 2015-07 (4)
- 2015-05 (3)
- 2015-04 (4)
- 2015-02 (2)
- 2015-01 (4)
- 2014-12 (4)
- 2014-11 (2)
- 2014-10 (19)