HBase中的LeaseException异常问题

本文详细阐述了在HBase批量扫描操作中遇到的租约失效错误及其原因,解释了租约机制的工作原理,并提供了解决方案。包括调整配置文件中的hbase.regionserver.lease.period和hbase.rpc.timeout参数,以防止租约过期导致的数据获取失败。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近的工作中,有个对hbase的批量scan处理,HBase regionserver的log中出现了如下错误:

  1. org.apache.hadoop.hbase.regionserver.LeaseException: lease '-8841369309248784313' does not exist  
  2.         at org.apache.hadoop.hbase.regionserver.Leases.removeLease(Leases.java:230)  
  3.         at org.apache.hadoop.hbase.regionserver.HRegionServer.next(HRegionServer.java:1847)  
  4.         at sun.reflect.GeneratedMethodAccessor11.invoke(Unknown Source)  
  5.         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)  
  6.         at jva.lang.reflect.Method.invoke(Method.java:597)  
  7.         at org.apache.hadoop.hbase.ipc.HBaseRPC$Server.call(HBaseRPC.java:570)  
  8.         at org.apache.hadoop.hbase.ipc.HBaseServer$Handler.run(HBaseServer.java:1039)  
这应该是客户端与regionserver之间交互的“租约”失效的问题。所谓租约,是指hbase client端每次和regionserver交互的时候,都会在服务器端生成一个租约(Lease),租约的有效期由参数hbase.regionserver.lease.period确定,默认的租约有效时间是60000ms,一分钟。
那么scan操作过程中,客户端去regionserver取数据的时候,hbase中存得数据量很大并且很多region的时候的,客户端请求的region不在内存中,或是没有被cache住,需要从磁盘中加载,如果这时候加载需要的时间超过hbase.regionserver.lease.period所配置的时间,并且客户端没有和regionserver报告其还活着,那么regionserver就会认为本次租约已经过期,并从LeaseQueue中从删除掉本次租约,当regionserver加载完成后,拿已经被删除的租约再去取数据的时候,就会出现如上的错误现象。
一般的做法,就是在配置文件中增大hbase.regionserver.lease.period的时间,但也不能忽略rpc连接的超时问题,所以在增大hbase.regionserver.lease.period的时候应该同时增大hbase.rpc.timeout,同时hbase.rpc.timeout应该等于或大于hbase.regionserver.lease.period。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值