2015-07-10 953 views
1

我目前使用HBase v0.98.6。我想從外部Java程序檢查當前的連接狀態。現在,我在做這樣的事情來檢查:如何設置創建HBase連接的時間限制

connectionSuccess = true; 
try { 
    HConnection hConnection = createConnection(config); 
} catch (Exception ex) { 
    connectionSuccess = false; 
} 

當連接工作,這將返回相當迅速。問題在於連接不能正常工作時,最終需要20分鐘才能返回connectionSuccess=false。有沒有辦法縮短這個時間限制,因爲我只是對當前獲得連接狀態感興趣?

+0

您可以使用Executor超時連接嘗試,如http:// stackoverflow .COM /問題/ 1164301 /怎麼辦,我叩一些阻斷法上帶有一個超時功能於Java的。 – 2015-07-10 19:42:26

+0

如果可能的話,我寧願在配置屬性中設置它。 – shimizu

+0

閱讀http://apache-hbase.679495.n3.nabble.com/How-to-make-the-client-fast-fail-td4072257.html最好的解決方案是使用超時線程並使用Executor相當於那個。 – 2015-07-10 21:23:13

回答

1

它需要這麼長時間的原因是,默認情況下,如果連接失敗,它會重試多次(我認爲6?不會引用我),並且每個連接嘗試需要一段時間。嘗試使用這些命令的組合來限制超時前每個連接的時間以及允許的重試次數。

hbase.client.retries.number = 3
hbase.client.pause = 1000
zookeeper.recovery.retry = 1(即,沒有重試)

信用給Lars從http://hadoop-hbase.blogspot.com/2012/09/hbase-client-timeouts.html

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");