`
乡里伢崽
  • 浏览: 112031 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

HiveServer2连接ZooKeeper出现Too many connections问题的解决

    博客分类:
  • hive
 
阅读更多
HiveServer2连接ZooKeeper出现Too many connections问题的解决
作者: 大圆那些事 | 文章可以转载,请以超链接形式标明文章原始出处和作者信息

网址: http://www.cnblogs.com/panfeng412/archive/2013/03/23/hiveserver2-too-many-zookeeper-connections-issues.html

HiveServer2支持多客户端的并发访问,使用ZooKeeper来管理Hive表的读写锁。实际环境中,遇到了HiveServer2连接ZooKeeper出现Too many connections的问题,这里是对这一问题的排查和解决过程。

问题描述
HiveServer2服务无法执行hive命令,日志中提示如下错误:

2013-03-22 12:54:43,946 WARN  zookeeper.ClientCnxn (ClientCnxn.java:run(1089)) - Session 0x0 for server hostname/***.***.***.***:2181, unexpected error, closing socket connection and attempting reconnect
java.io.IOException: Connection reset by peer
        at sun.nio.ch.FileDispatcher.read0(Native Method)
        at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:21)
        at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:233)
        at sun.nio.ch.IOUtil.read(IOUtil.java:200)
        at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:236)
        at org.apache.zookeeper.ClientCnxnSocketNIO.doIO(ClientCnxnSocketNIO.java:68)
        at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:355)
        at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1068)
问题排查
1. 首先,根据HiveServer2的错误日志,提示是由于Connection reset by peer,即连接被ZooKeeper拒绝。

2. 进一步查看HiveServer2上所配置的ZooKeeper集群日志(用户Hive表的读写锁管理),发现如下错误信息:

2013-03-22 12:52:48,938 [myid:] - WARN  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@193] - Too many connections from /***.***.***.*** - max is 50
3. 结合HiveServer2的日志,可见是由于HiveServer2所在机器对ZooKeeper的连接数超过了ZooKeeper设置允许的单个client最大连接数(这里是50)。

4. 我们进一步确认了是不是完全都是HiveServer2占用了这50个连接,显示确实是HiveServer2进程内部占用了这50个连接(进程号26871即为HiveServer2进程):

[user@hostname ~]$ sudo netstat -nap  | grep 2181
tcp    0      0 ***.***.***.***:58089   ***.***.***.***:2181    ESTABLISHED 26871/java         
tcp    0      0 ***.***.***.***:57837   ***.***.***.***:2181    ESTABLISHED 26871/java         
tcp    0      0 ***.***.***.***:57853   ***.***.***.***:2181    ESTABLISHED 26871/java        
……
(共计50个)
5. 为什么HiveServer2会占用这么多连接?而实际并发请求量并没有这么多。只能从HiveServer2的实现原理找找线索,由于HiveServer2是通过Thrift实现的,怀疑是不是其内部维护连接池导致的?经过查看hive-default.xml中发现,其中默认配置了工作线程数(这里猜测每个工作线程会维护一个与ZooKeeper的连接,有待从代码级别进行验证):

<property>
  <name>hive.server2.thrift.min.worker.threads</name>
  <value>5</value>
  <description>Minimum number of Thrift worker threads</description>
</property>
<property>
  <name>hive.server2.thrift.max.worker.threads</name>
  <value>100</value>
  <description>Maximum number of Thrift worker threads</description>
</property>
问题解决
方法一:

通过在hive-site.xml中修改HiveServer2的Thrift工作线程数,减少与ZooKeeper的连接请求数。这样可能降低HiveServer2的并发处理能力。

方法二:

通过修改ZooKeeper的zoo.cfg文件中的maxClientCnxns选项,调大对于单个Client的连接数限制。

以上两个方法,需要根据自己的实际生产情况进行合理设置。

相关的配置选项:

1)hive-site.xml中:

<property>
  <name>hive.server2.thrift.min.worker.threads</name>
  <value>10</value>
  <description>Minimum number of Thrift worker threads</description>
</property>
<property>
  <name>hive.server2.thrift.max.worker.threads</name>
  <value>200</value>
  <description>Maximum number of Thrift worker threads</description>
</property>
<property>
  <name>hive.zookeeper.session.timeout</name>
  <value>60000</value>
  <description>Zookeeper client's session timeout. The client is disconnected, and as a result, all locks released, if a heartbeat is not sent in the timeout.</description>
</property>
2)zoo.cfg中:

# Limits the number of concurrent connections (at the socket level) that a single client, identified by IP address
maxClientCnxns=200
# The minimum session timeout in milliseconds that the server will allow the client to negotiate
minSessionTimeout=1000
# The maximum session timeout in milliseconds that the server will allow the client to negotiate
maxSessionTimeout=60000
分享到:
评论

相关推荐

    Dubbo无法访问远程Zookeeper已注册服务的问题解决方案

    Dubbo无法访问远程Zookeeper已注册服务的问题解决方案 在使用Dubbo框架时,可能会遇到无法访问远程Zookeeper已注册服务的问题...通过检查Zookeeper的连接情况、Dubbo的配置文件和网络连接情况,我们可以解决这个问题。

    zookeeper连接工具

    2. **Zookeeper操作** - **创建节点(create)**: 创建新的Znode,并可以设置数据、权限和是否持久化。 - **读取节点(get)**: 获取Znode的数据和元信息。 - **更新节点(set)**: 修改Znode的数据。 - **删除...

    zookeeper客户端连接工具: zktools

    zktools是针对ZooKeeper开发的一款客户端连接工具,它使得与ZooKeeper交互变得更加便捷和高效。这款工具通常包含了一些实用的功能,如查看ZNode(ZooKeeper中的数据节点)信息,执行数据操作,监控会话状态,以及...

    java连接zookeeper,并增加acl权限.docx

    Java 连接 ZooKeeper 并增加 ACL 权限 ZooKeeper 是一个开源的分布式应用程序协调服务,由 Apache 软件基金会提供。它提供了许多功能,如配置管理、名字服务、分布式同步、组服务等。 Java 是一种广泛使用的编程...

    zookeeper连接工具zktools

    为了方便开发者与Zookeeper进行交互,出现了各种实用工具,其中ZkTools是一个广受欢迎的命令行工具,它简化了对Zookeeper的操作,使得管理Zookeeper节点和数据更加便捷。 Zookeeper的主要功能包括: 1. **配置管理...

    java连接zookeeper的jar包

    Java连接Zookeeper主要依赖于Apache ZooKeeper项目提供的Java客户端库,这个库包含了处理Zookeeper会话、操作数据节点以及监听事件的关键组件。在给定的压缩包文件中,可能包含了以下核心的jar包: 1. **zookeeper....

    ZooInspector zookeeper连接工具

    《ZooInspector:Zookeeper的可视化连接工具》 ZooInspector是Zookeeper生态系统中的一个实用工具,它作为一个轻量级的客户端,专为管理和监控Zookeeper集群而设计。这款工具支持在Windows和Linux操作系统上运行,...

    zookeeper客户端会话频繁超时解决方案 broker无法连接客户端触发自动关闭解决方案

    记录一次自己碰到的问题, 亲测有效 zookeeper客户端会话频繁超时解决方案 broker无法连接客户端触发自动关闭解决方案 zookeeper客户端会话频繁超时解决方案 broker无法连接客户端触发自动关闭解决方案

    MAC上查看Zookeeper节点工具

    在IT行业中,Zookeeper是一个广泛使用的分布式协调服务,它由Apache Hadoop项目开发,主要用于管理大量的分布式系统。在MAC操作系统上,我们有时需要对Zookeeper的节点数据进行查看和管理,这时就需要用到特定的工具...

    zookeeper可视化工具

    在实际工作中,Zookeeper可视化工具可以帮助解决以下问题: - **故障排查**:当服务出现异常时,可以通过工具查看Zookeeper的状态,检查是否有数据错误或权限问题。 - **配置管理**:在分布式环境中,使用工具统一...

    zookeeper查看工具

    Zookeeper提供了诸如配置管理、命名服务、分布式同步、组服务等一系列功能,帮助开发者解决在分布式环境中常见的复杂问题。 Zookeeper运维工具,例如淘宝开源的zkweb,是为了解决Zookeeper操作的便捷性和可视化需求...

    zookeeper安装包(内附客户端连接工具)

    它主要用于解决分布式应用中的数据一致性问题,提供命名服务、配置管理、集群管理、分布式锁等核心功能。Zookeeper在分布式系统中的角色至关重要,是许多大规模分布式系统的基石。 **1. Zookeeper架构** Zookeeper...

    prettyZoo,zookeeper window客户端

    3. "zookeeper连接":指客户端通过特定协议(如TCP/IP)与Zookeeper服务器建立连接,进行数据读写和状态查询等操作。 **压缩包子文件的文件名称列表:** "prettyZoo-win.msi" 是一个Windows安装程序文件,用于在...

    zookeeper-3.4.6_zookeeper_

    2. **原子操作**:所有的读写操作都是原子性的,这意味着一次只能执行一个操作,不会出现并发问题,这在分布式环境下尤为重要。 3. **事件通知**:Zookeeper提供watcher机制,允许客户端设置监听某个节点的变化,当...

    zookeeper限制ip版

    在`src/main/java/org/apache/zookeeper/server/NIOServerCnxnFactory.java` 文件中,`acceptConnections()` 方法是接收客户端连接的地方。 - **添加IP检查逻辑**:在该方法内部,我们可以插入IP检查的代码,通过...

    zookeeper未授权访问修复建议

    但是,如果 ZooKeeper 没有正确地配置访问权限,就可能会出现未授权访问的问题,本文将为读者提供 ZooKeeper 未授权访问修复建议。 一、 ZooKeeper 访问权限配置 ZooKeeper 的访问权限配置是通过 ACL(Access ...

    zookeeper的客户端使用,图形化界面查看节点信息

    描述中提到的“启动bat脚本,输入连接ip”,这通常是指在Windows环境下,使用Zookeeper提供的zkServer.cmd脚本来启动服务,然后通过zkCli.cmd客户端工具连接到Zookeeper服务器。连接时,用户需要输入Zookeeper服务器...

    Zookeeper学习中的疑难问题总结,很受用!

    1. **分布式协调服务**:Zookeeper 可以用来解决分布式系统中的许多常见问题,例如负载均衡、故障恢复等。 2. **消息队列管理**:利用 Zookeeper 的通知机制可以构建可靠的消息队列系统。 3. **服务发现**:...

    zookeeper增加权限登录验证

    为了解决这些问题,本文将介绍如何在 ZooKeeper 中增加权限登录验证,以限制访问 IP 地址。 一、背景知识 ZooKeeper 是一个基于 Java 的分布式协调服务,它可以为分布式应用提供配置管理、名字服务、分布式锁等...

Global site tag (gtag.js) - Google Analytics