我目前正在使用HBase v0.98.6。我想从外部Java程序检查当前的连接状态。现在,我正在做这样的事情来检查:
connectionSuccess = true;
try {
HConnection hConnection = createConnection(config);
} catch (Exception ex) {
connectionSuccess = false;
}
当连接正常时,返回相当快。问题是当连接不起作用时,它最终返回connectionSuccess=false
需要20分钟。有没有办法减少这个时间限制,因为我只对当前获取连接状态感兴趣?
答案 0 :(得分:1)
它需要这么长时间的原因是默认情况下,如果连接失败,它将重试多次(我认为6?不要引用我),每次连接尝试都需要一段时间。尝试结合使用这些命令来限制超时前每个连接的时间,以及允许的重试次数。
hbase.client.retries.number = 3
hbase.client.pause = 1000
zookeeper.recovery.retry = 1(即没有重试)
来自http://hadoop-hbase.blogspot.com/2012/09/hbase-client-timeouts.html
的Lars答案 1 :(得分:0)
我的org.apache.hadoop.conf.Configuration对象包含以下键值对:
Configuration conf = HBaseConfiguration.create();
//configuring timeout and retry parameters
conf.set("hbase.rpc.timeout", "10000");
conf.set("hbase.client.scanner.timeout.period", "10000");
conf.set("hbase.cells.scanned.per.heartbeat.check", "10000");
conf.set("zookeeper.session.timeout", "10000");
conf.set("phoenix.query.timeoutMs", "10000");
conf.set("phoenix.query.keepAliveMs", "10000");
conf.set("hbase.client.retries.number", "3");
conf.set("hbase.client.pause", "1000");
conf.set("zookeeper.recovery.retry", "1");
答案 2 :(得分:0)
您可以将重试值设置为1,以获取当前时间的连接状态。
Configuration conf = HBaseConfiguration.create();
conf.setInt("hbase.client.retries.number",1);
conf.setInt("zookeeper.recovery.retry",0);
或者您可以使用下面的内置HbaseAdmin方法执行相同的操作。
connectionSuccess = true;
try
{
HBaseAdmin.checkHBaseAvailable(config);
}
catch(MasterNotRunningException e)
{
connectionSuccess = false;
}