一、什么是租约

租约(Lease)是一种广泛应用与分布式系统领域的协议,主要用来维护分布式系统的一致性

HDFS中,当每次客户端用户往某个文件中写入数据的时候,为了保持数据的一致性,此时其它客户端程序是不允许向此文件同时写入数据的。那么HDFS是如何做到这一点的呢?答案是租约(Lease)。换句话说,租约是HDFS给予客户端的一个写文件操作的临时许可证,无此证件者将不被允许操作此文件。

二、HDFS租约模型和内部机制

HDFS租约的相关定义

1:每个客户端用户持有一个租约

2:每个租约的保护持有者信息,还有此租约对应的文件Id列表,表示当前租约持有者正在写这些文件Id对应的文件

3:每个租约内包含有一个最新近更新时间,最近更新时间将会决定此租约是否已过期。过期的租约会导致租约持有者无法继续执行写数据到文件中,除非进行租约的更新

LeaseManagerLeaseManager是租约的管理者,运行于HDFS-Server端,其主要功能特性有

  *维护了DFSClientLease的映射关系

  *维护了filePathLease的映射关系

  *对租约进行生命周期和状态的管理:

    >创建租约或正常情况下的销毁租约

    >赋予(或撤销)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 > 25dfs.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