Hbase客户端ConnectionLoss for / hbase错误

时间:2011-05-27 14:18:44

标签: java ruby hadoop hbase thrift

我要完全疯了:

已安装的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

通过ruby&amp; amp;节俭,一切都很好;我们正在添加数据,它正在进入系统,我们可以查询/扫描它。一切似乎都很好。

但是,在与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上的节俭也是如此)。

任何人都可以帮助我吗?

5 个答案:

答案 0 :(得分:9)

这是Zookeeper(ZK)错误。 HBase客户端尝试从Zookeeper获取/ hbase节点并失败。

您可以从HBase主Web界面获取ZK转储。您应该看到与ZK的所有连接,并确定是否有些事情正在耗尽它们。

在深入研究其他任何事情之前,您可以尝试重新启动ZK群集并查看它是否能解决您的问题。 (你看到一个客户就很奇怪了。)

HBase有一个设置来增加与ZK的连接数。这是

hbase.zookeeper.property.maxClientCnxns

最近有一些与默认连接数相关的更新(见下文)(有一个hbase-default.xml文件,其中包含所有默认配置)。 您可以在hbase-site.xml文件中(在HBase conf dir下)覆盖它并将其提高到100或更多。但请确保您没有以这种方式掩盖真正的问题,您不应该在单个客户端看到这个问题。

我们遇到了类似的情况,但是在升级到HBase-0.90之后,在map-reduce作业的繁重操作期间发生了这种情况。

以下是与您的问题相关的几个问题:

如果您仍然无法弄明白,请发送电子邮件至hbase-users列表或加入freenode上的#hbase频道并提出实时问题。

答案 1 :(得分:3)

问题实际上是(由于某种原因......我没有详细说明)防火墙阻止了与Zookeeper交谈所需的一个端口;从它的工作命令行,从我的应用程序它没有。然而,当我禁用防火墙时,一切都工作得很好。

感谢您的帮助!

答案 2 :(得分:3)

当用户在客户端获取的hbase-site.xml中为“zookeeper.znode.parent”定义的值不正确时,或者在编写自定义API的情况下,“zookeeper.znode.parent”为错误地更新到错误的位置。例如,默认的“zookeeper.znode.parent”设置为“/ hbase-unsecure”,但是如果您错误地指定为“/ hbase”而不是我们在群集中设置的那样,我们将遇到此尝试连接到HBase集群时出现异常

答案 3 :(得分:1)

我遇到了与我的hbase db相同的问题。

原来我/etc/hosts中的数据库机器地址不好。

答案 4 :(得分:1)

第1步:首先将使用“ jps”命令检查HBase主节点是否正在运行。

第2步:使用“ stop-all.sh”命令停止Hadoop集群上所有正在运行的服务。

有关此问题的更多信息:

http://commandstech.com/hbase-error-keeperrorcode-connectionloss-for-hbase-in-cluster/

第3步:使用“ start-all.sh”命令启动所有正在运行的服务。

步骤4:使用“ jps”命令检查服务是否显示HBase主站正常工作,否则可以执行以下步骤:

第5步:使用“ sudo su”转到root用户

第6步:转到hbase shell文件路径:“ cd /usr/lib/habse-1.2.6-hadoop/bin/start-hbase.sh”

第7步:使用“ hbase shell”命令打开hbase shell

第8步:使用“列表”命令。