HDFS租约机制

HDFS中,当一个客户端往HDFS某个文件写入数据的时候,为了保持数据的一致性,其他客户端是不允许同时写入的。为了实现这一机制,HDFS引入了租约的概念。简而言之,租约是HDFS 给与客户端可以写入某个文件的临时许可证,没有此证件或者租约到期都不能继续向该文件写入数据。

一 租约的属性或者要素:

1、租约持有者(holder):一般是指客户端,每一个客户端持有一个租约。

2、租约对应的文件列表:一个客户端的所持有的租约允许对应多个文件id列表,表示这个客户端可以同时对多个文件进行操作。

3、最近更新时间:以此决定租约是否过期。

 

二 HDFS中租约的管理

比如租约的添加移除或者客户端操作完毕未及时释放租约,HDFS的处理流程,过期的租约是怎么处理的等。这些操作都是在租约管理器中实现的LeaseManager.

LeaseManager由于是要对外提供服务的,所以毫无疑问它属于Active

NameNode运行的服务,

2.1作用

1、维护租约持有者和租约的映射关系

2、维护文件路径和租约的映射关系

 

3、提供租约增删改查方法

4、维护一个监视器进程,定期检查租约是否到期或者超时,对于长时间没有更新租约的文件(硬时间限制),就会触发租约恢复机制

 

2.2添加租约-addLease

HDFS客户端在写文件的时候,需要申请租约,根据holder去获取租约,如果没有获取到,则创建一个租约,然后更新租约和租约持有者的信息;如果已经存在,可以先从租约持有者和租约映射关系移除,

且需要从文件列表移除,在添加新的租约,然后更新对应的映射关系

 

2.3租约检查-FSNamesystem.checkLease

当客户端放弃申请到的数据块或者上一次申请的数据块用完了,现在申请新的数据块,那么都需要检查租约。

如果HDFS文件不存在,或者是一个目录,或者已经被删除,或者正处于构建中,则抛出异常。

2.4租约更新-renewLease

根据以更新时间排序的租约集合中删除当前租约,再更新这个租约的最新更新时间,再次加到租约集合中

 

2.5删除租约

NameNode关闭构建中的文件,将文件构建状态转变为非构建状态,同时由于客户端已经完成了写操作,所以需要删除租约。

 

三 租约检查机制

租约管理器会定期对租约进行检查,对于长时间没有进行租约更新的文件,会对这个文件进行租约恢复,然后关闭这个文件。

什么时候会出现租约过期呢?比如HDFS出现故障,客户端和可能在打开一个文件之后出现故障,造成客户端不能玩成租约更新以及租约的删除操作,这就造成逐月过期。

 

定期检查是由内部的Monitor内部类负责的,每个2s就会运行一次,调用一次LeaseManager.checkLeases()方法。

首先遍历所有租约

然后:如果没有超过硬时间限制则直接返回

再次:是对过期租约取出对应的文件,然后对文件租约进行恢复

最后:需要在editlog中同步恢复记录

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

莫言静好、

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

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

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

打赏作者

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

抵扣说明:

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

余额充值