错误 HBASE-ZOOKEEPER:连接太多
Posted
技术标签:
【中文标题】错误 HBASE-ZOOKEEPER:连接太多【英文标题】:Error HBASE-ZOOKEEPER : Too many connections 【发布时间】:2012-03-02 01:57:27 【问题描述】:我在我的应用程序中使用 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
如果需要,我可以提供完整的堆栈跟踪。(因为完整的堆栈跟踪会让这里变得一团糟)。
请帮助我了解如何处理这种情况。我需要做任何配置来增加连接池吗?
【问题讨论】:
【参考方案1】:Zookeeper 服务器有一个活动连接数限制,默认为 30。 您需要通过在 zookeeper 配置文件 zoo.cfg 中相应地设置 maxClientCnxns 属性来增加此限制。
对于 100 个连接:
maxClientCnxns=100
告诉zookeeper不限制连接数:
maxClientCnxns=0
【讨论】:
感谢您的回复,我会在试用后回复您 在哪里可以找到 zoo.cfg?我在 hbase 目录中的任何地方都找不到它 它不在hbase目录里面,它在zookeeper conf目录里面。如果你使用 hbase 管理 zookeeper,你可以使用 hbase-site.xml 中的属性 hbase.zookeeper.property.maxClientCnxns,但我不推荐它用于生产环境,因为它在分布式模式下不起作用。 是不是找不到zookeeper目录?我使用 hbase,所以我有一个 hbase 目录和子目录,但 zookeeper 无处可去。 @JayaAnanthram 是的,您可以使用“四个字母单词”之一来检查 Zookeeper 连接信息。 zookeeper.apache.org/doc/trunk/…(如果您需要连接数,请使用“mntr”或“stat”,否则“cons”会提供有关每个打开连接的有用信息)【参考方案2】:我不建议盲目地转储最大连接数,这个配置不是到 ZK 的最大连接数,而是每个客户端到 ZK 的最大并发连接数,根据 ZK 文档:
maxClientCnxns(无 Java 系统属性)
限制并发连接数(在套接字级别) 由 IP 地址标识的单个客户端可以对单个成员进行 ZooKeeper 合奏。这用于防止某些类别的 DoS 攻击,包括文件描述符耗尽。将此设置为 0 或完全省略它会消除对并发连接的限制。
因此,您必须有超过 30 个从同一 IP 地址到 ZK 的并发连接。在这种情况下,使用netstat
来调试该IP 是什么,并检查什么可以同时启动这些连接。
【讨论】:
【参考方案3】:对于上述问题,您需要重新启动 HBase 的主服务。 相同的命令是
sudo /etc/init.d/hadoop-hbase-master start
这需要在进入 HBase shell 之前完成。
【讨论】:
以上是关于错误 HBASE-ZOOKEEPER:连接太多的主要内容,如果未能解决你的问题,请参考以下文章