NameNode之租约管理

我们知道HDFS文件是一次性,多次读,并且客户端不支持并行写操作。那么这里就需要一种机制保证对HDFS文件互斥操作。HDFS提供了租约(Lease)机制来实现这个功能

 

什么是租约?

是NameNode给与租约持有者(LeaseHolder)一般是客户端在规定时间内拥有文件权限的合同

 

在HDFS,客户端写文件时,需要先从租约管理器(LeaseManager)申请一个租约,成功申请租约之后客户端成为了租约持有者,也就拥有了对该HDFS文件的独占权限,其他客户端在该租约有效时无法打开这个HDFS文件进行操作。

 

租约管理器会定期检查他所维护的所有租约是否过期,租约管理器会强制回收过期的租约,客户端完成写操作,关闭文件时,必须在租约管理中释放租约。

 

HDFS客户端是可以同时打开多个文件进行读写的,为了便于管理,在租约管理器中将一个客户端打开的所有文件组织在一起构成一条记录,也就是LeaseManager.Lease类。

 

Lease中重要的字段:

Holder:保存了客户端也就是租约持有者的信息

Paths:保存了该客户端打开的所有的HDFS文件路径

LastUpdate:字段保存了租约最后的更细时间

重要方法:

Renew:更新客户端的lastUpdate最近更新时间

ExpiredSoftLimit:判断当前租约是否超过了软限制,默认60s

ExpiredHardLimit:判断当前租约是否炒出了应限制默认60分钟

 

一 LeaseManager

对NameNode中所有租约进行管理,提供了增删改查方法,同时还维护了一个Monitor线程定期检查租约是否超时。对于长时间没有更新的租约的文件,LeaseManager会触发租约恢复机制,然后关闭文件

 

LeaseManager中使用leases,sortedLeases,sortedLeasesByPath三者字段保存NameNode中所有租约;使用imthread字段保存租约检查线程;

使用softLimit字段保存软限制时间等

Leases:保存了租约持有者和租约的对应关系

SortedLeases:以租约更新时间为顺序保存LeaseManager中所有租约

sortedLeasesByPath:保存了文件路径和租约的对应关系

 

LeaseManager可以对租约进行增删改查,他还可以定期检查租约,对于长时间没有进行租约更新的文件,LeaseManager会对这个文件进行租约恢复操作,然后关闭这个文件。

什么情况下,会租约过期呢?

我们知道HDFS是一个分布式系统,很有可能客户端在打开一个一个文件之后,出现故障,这就要造成客户端不能完成租约更新以及写文件之后租约删除操作,这时候会造成租约过期。

 

租约的定期检查操作是由LeaseManager的内部类Monitor执行的,Monitor是一个线程类,他的run方法会每个2s调用一次LeaseManager.

checlLease方法检查租约

我们知道软限制用于记录写文件规定的租约超时时间,应限制用于判断文件是否异常而而未能正确关闭的,在checkLease中就是使用到硬限制判断是否需要进行租约恢复操作的。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫言静好、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值