5

我在我的应用程序中使用 Hbase-Hadoop 组合以及作为 ORM 的 Data Nucleus。

当我试图一次通过多个线程访问 hbase 时。它抛出异常为:

Exception in thread "Thread-26" javax.jdo.JDODataStoreException

org.apache.hadoop.hbase.ZooKeeperConnectionException: HBase is able to connect to ZooKeeper but the connection closes immediately. This could be a sign that the server has too many connections (30 is the default). Consider inspecting your ZK server logs for that error and then make sure you are reusing HBaseConfiguration as often as you can. See HTable's javadoc for more information.

Caused by: org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase

如果需要,我可以提供完整的堆栈跟踪。(因为完整的堆栈跟踪会使这里的事情变得一团糟)。

请帮助我提供一些有关如何处理这种情况的线索。我需要做任何配置来增加连接池吗?

4

3 回答 3

9

Zookeeper 服务器有一个活动连接限制,默认为 30。您需要通过在 zookeeper 配置文件 zoo.cfg 中相应地设置 maxClientCnxns 属性来增加此限制。

对于 100 个连接:

maxClientCnxns=100

告诉 zookeeper 对连接数没有限制:

maxClientCnxns=0
于 2012-02-11T00:50:44.393 回答
2

根据 ZK 文档,我不建议盲目转储最大连接数,此配置不是到 ZK 的最大连接数,而是每个客户端到 ZK 的最大并发连接数:

maxClientCnxns(无 Java 系统属性)

限制由 IP 地址标识的单个客户端可以与 ZooKeeper 集合的单个成员建立的并发连接数(在套接字级别)。这用于防止某些类别的 DoS 攻击,包括文件描述符耗尽。将此设置为 0 或完全忽略它会消除对并发连接的限制。

因此,您必须有超过 30 个从同一 IP 地址到 ZK 的并发连接。在这种情况下,用于netstat调试该 IP 是什么,并检查什么可以同时启动这些连接。

于 2018-12-06T19:56:30.790 回答
0

对于上述问题,您需要重新启动 HBase 的主服务。相同的命令是

sudo /etc/init.d/hadoop-hbase-master start

这需要在进入 HBase shell 之前完成。

于 2018-01-01T11:16:23.837 回答