HBase scan 时 异常 ScannerTimeoutException 解决

  1. org.apache.Hadoop.hbase.client.ScannerTimeoutException: 60622ms passed since the last invocation, timeout is currently set to 60000  
  2.     at org.apache.hadoop.hbase.client.HTable$ClientScanner.next(HTable.java:1196)   
  3.     at org.apache.hadoop.hbase.mapreduce.TableRecordReaderImpl.nextKeyValue(TableRecordReaderImpl.java:133)   
  4.     at org.apache.hadoop.hbase.mapreduce.TableRecordReader.nextKeyValue(TableRecordReader.java:142)   
  5.     at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.nextKeyValue(MapTask.java:532)   
  6.     at org.apache.hadoop.mapreduce.MapContext.nextKeyValue(MapContext.java:67)   
  7.     at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:143)   
  8.     at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764)   
  9.     at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)   
  10.     at org.apache.hadoop.mapred.Child$4.run(Child.java:255)   
  11.     at java.security.AccessController.doPrivileged(Native Method)   
  12.     at javax.security.auth.Subject.doAs(Subject.java:396)   
  13.     at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1093)   
  14.     at org.apache.hadoop.mapred.Child.main(Child.java:249)  

如在scan hbase的时候见到如上报错,核心是,你某两次scan的触发的间隔时间过长。因此就得从两个部分寻找原因:

1. 是否你自己每次的scan处理较耗时? ->  优化处理程序,scan一些设置调优(比如setBlockCache(false) )

2. 是否每次scan的caching设置过大?  ->  减少caching (一般默认先设100)

3. 是否是网络或机器负载问题?    ->  联系运维跟进查看集群原因

4. 是否HBase本身负载问题?     ->   查看RegionServer日志

 

一般以上四个问题都解决了(或确定目前暂不能解决),才考虑调整hbase的一些配置问题,比如网上提到的 config.setLong(HConstants.HBASE_REGIONSERVER_LEASE_PERIOD_KEY, 120000) , default 60000 。这个值就是异常中的那个currently set的值。

在HBase1.1.2中的源码是:

  this.scannerTimeout = HBaseConfiguration.getInt(conf,
        HConstants.HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD,
        HConstants.HBASE_REGIONSERVER_LEASE_PERIOD_KEY,
        HConstants.DEFAULT_HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD);
HBASE_REGIONSERVER_LEASE_PERIOD_KEY="hbase.regionserver.lease.period" 这个被deprecated掉了,新的用 HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD = "hbase.client.scanner.timeout.period"。
也就是说在这个版本之后应该设置 config.setLong(HConstants.HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD, 120000)

转载于:https://www.cnblogs.com/lhfcws/p/7093359.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值