ScannerTimeoutException 问题分析与解决方法

本文探讨HBase中scannerTimeout异常的根源及其解决方法。通过调整配置文件或程序内部参数,确保扫描操作不会因超时而失败。

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

 遇到一些hadoop,hbase相关的异常,有时会有不知怎么解决的感觉,首先要确定问题,然后找出引起此问题的原因,再然后制定解决方案,最后选择一种实行。

hbase源码如巨人般站在我们的心中,让心强大起来,巨人就变小了

言归正传:

1.首先寻根朔源
scannerTimeout:Thrown when a scanner has timed out.当一个scanner超时时抛出此异常,是HTable的一个属性。
它是从哪设置的呢,请看下面:
package org.apache.hadoop.hbase.client;
public class HTable implements HTableInterface {
 protected final int scannerTimeout;
 public HTable(Configuration conf, final byte [] tableName) {
  this.scannerTimeout =
        (int) conf.getLong(HConstants.HBASE_REGIONSERVER_LEASE_PERIOD_KEY, HConstants.DEFAULT_HBASE_REGIONSERVER_LEASE_PERIOD); 
 }
}
然后看看HConstants里那两个值的设定,conf.getLong(v1,v2);此方法是指,从配置文件里读第一个“hbase.regionserver.lease.period”,
如果配置文件中没有此项,则将其设置为v2,即DEFAULT_HBASE_REGIONSERVER_LEASE_PERIOD = 60000(ms),就是60s。
package org.apache.hadoop.hbase;
public final class HConstants {
  public static String HBASE_REGIONSERVER_LEASE_PERIOD_KEY =
    "hbase.regionserver.lease.period";


  /**
   * Default value of {@link #HBASE_REGIONSERVER_LEASE_PERIOD_KEY}.
   */
  public static long DEFAULT_HBASE_REGIONSERVER_LEASE_PERIOD = 60000;
 
  /**
   * timeout for each RPC
   */
  public static String HBASE_RPC_TIMEOUT_KEY = "hbase.rpc.timeout";
  /**
   * Default value of {@link #HBASE_RPC_TIMEOUT_KEY}
   */
  public static int DEFAULT_HBASE_RPC_TIMEOUT = 60000;
}


抛出此异常一般都是说,你用了多少秒了(>60),超过了限制啦。于是:
2.两种解决方案:
一是修改此值,将其设置大一些,这里设置成180秒,太大了连接会一直维持,有缺点
修改配置文件:$HBASE_HOME/conf/hbase-site.xml,修改或添加此属性
<property>
<name>hbase.regionserver.lease.period</name>
<value>180000</value>
</property>

二是修改程序,换一种思路,最好一次scan在60秒内总能返回至少一条结果。

看 HBase权威指南,发现还有中简单的方法:

Configuration conf = HBaseConfiguration.create()
conf.setLong(HConstants.HBASE_REGIONSERVER_LEASE_PERIOD_KEY, 120000)

 
这样便改了,而且只是改了当前这次的client请求
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值