2011-05-27 321 views
10

我要完全瘋了:Hbase客戶端ConnectionLoss for/hbase錯誤

安裝Hadoop/Hbase,全部正在運行;

/opt/jdk1.6.0_24/bin/jps 
23261 ThriftServer 
22582 QuorumPeerMain 
21969 NameNode 
23500 Jps 
23021 HRegionServer 
22211 TaskTracker 
22891 HMaster 
22117 SecondaryNameNode 
21779 DataNode 
22370 Main 
22704 JobTracker 

僞分佈式環境。

hbase shell

正在運行並提供運行'list'的正確結果;

hbase shell 
HBase Shell; enter 'help<RETURN>' for list of supported commands. 
Type "exit<RETURN>" to leave the HBase Shell 
Version 0.90.1-cdh3u0, r, Fri Mar 25 16:10:51 PDT 2011 

hbase(main):001:0> status 
1 servers, 0 dead, 8.0000 average load 

當通過紅寶石連接&節儉,一切工作正常;我們正在添加數據,它正在進入系統,我們可以查詢/掃描它。一切似乎都很好。

然而,與Java連接時:

groovy> import org.apache.hadoop.hbase.HBaseConfiguration 
groovy> import org.apache.hadoop.hbase.client.HBaseAdmin 
groovy> conf = HBaseConfiguration.create() 
groovy> conf.set("hbase.master","127.0.0.1:60000"); 
groovy> hbase = new HBaseAdmin(conf); 

Exception thrown 

org.apache.hadoop.hbase.ZooKeeperConnectionException: org.apache.hadoop.hbase.ZooKeeperConnectionException: org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase 
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getZooKeeperWatcher(HConnectionManager.java:1000) 
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.setupZookeeperTrackers(HConnectionManager.java:303) 
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.<init>(HConnectionManager.java:294) 
    at org.apache.hadoop.hbase.client.HConnectionManager.getConnection(HConnectionManager.java:156) 
    at org.apache.hadoop.hbase.client.HBaseAdmin.<init>(HBaseAdmin.java:84) 

我一直在試圖找到原因,但我真的不知道在所有。一切似乎都已正確安裝。

netstat -lnp|grep 60000 
tcp6  0  0 :::60000    :::*     LISTEN  22891/java 

看起來不錯。

# telnet localhost 60000 
Trying 127.0.0.1... 
Connected to localhost. 
Escape character is '^]'. 

連接,如果你鍵入任何內容+進入死亡(不知道如果是這樣的想法,在9090節儉不相同)。

任何人都可以幫助我嗎?

回答

8

查爾斯,

這是一個動物園管理員(ZK)錯誤。 HBase客戶端嘗試從Zookeeper獲取/ hbase節點並失敗。

您可以從HBase主Web界面獲取ZK轉儲。你應該看到與ZK的所有連接,並找出是否有什麼耗盡它們。

在潛入其他任何東西之前,您可以嘗試重新啓動ZK集羣並查看它是否修復了您的問題。 (奇怪的是,你看到一個客戶端)。

HBase有一個設置來增加到ZK的連接數。這是

hbase.zookeeper.property.maxClientCnxns 

有幾個更新(見下文)最近有關連接的默認數量(有這個有所有的默認配置的HBase的-default.xml中的文件)。 你可以在你的hbase-site.xml文件(HBase conf目錄下)中覆蓋它,並將其提高到100或更高。但要確保你不以這種方式掩蓋真正的問題,你不應該看到單個客戶端的這個問題。

我們也遇到了類似的情況,但是在升級到HBase-0.90之後,在map-reduce作業的繁重操作中發生了這種情況。

這裏有幾個問題涉及您的問題:

如果您仍然無法弄清楚發送電子郵件到HBase的用戶列表或加入freenode上的#hbase頻道並提問現場問題。

3

的問題是實際上是(出於某種原因...我真的不明白它的細節)防火牆擋住了交談動物園管理員所需的端口之一;從它的工作命令行,從我的應用程序它沒有。但是,當我禁用防火牆時突然一切正常。

謝謝你的幫助!

+4

您可以加入哪些端口不zookeper需要是開放的?謝謝! – Gevorg 2015-02-12 22:04:49

+1

除了TCP 2181還有其他需要嗎? – Gevorg 2015-02-20 22:46:44

1

我有連接到我的HBase數據庫同樣的問題。

原來我在/etc/hosts有分貝機的一個錯誤的地址。

2

這發生在當用戶具有寫入源在客戶端或在一個自定義的API的情況下的HBase-site.xml中爲「zookeeper.znode.parent」中定義的不正確的值,則「zookeeper.znode.parent」錯誤地更新到錯誤的位置。例如默認的「zookeeper.znode.parent」設置爲「/ HBase的,不安全的」,但如果錯誤地指定爲可以說「/ HBase的」,而不是我們已經在集羣中建立,我們會遇到這樣的例外,同時試圖連接到HBase的集羣