- 浏览: 112031 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
土豆蛋儿:
我想读取一个外部文件,以什么方式好了? 文件内容经常编辑
flume 自定义source -
土豆蛋儿:
大神,您好。
flume 自定义source
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
作者: 大圆那些事 | 文章可以转载,请以超链接形式标明文章原始出处和作者信息
网址: 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
发表评论
-
hive + hbase
2015-01-04 10:42 773环境配置: hadoop-2.0.0-cdh4.3.0 (4 ... -
hive 数据倾斜
2014-08-27 09:03 687链接:http://www.alidata.org/archi ... -
hive 分通总结
2014-08-27 08:42 576总结分析: 1. 定义了桶,但要生成桶的数据,只能是由其他表 ... -
深入了解Hive Index具体实现
2014-08-25 08:51 739索引是标准的数据库技术,hive 0.7版本之后支持索引。hi ... -
explain hive index
2014-08-24 16:44 1148设置索引: 使用聚合索引优化groupby操作 hive> ... -
Hive 中内部表与外部表的区别与创建方法
2014-08-15 17:11 763分类: Hive 2013-12-07 11:56 ... -
hive map和reduce的控制
2014-08-15 16:14 625一、 控制hive任务中的map数: 1. 通 ... -
hive 压缩策略
2014-08-15 15:16 1769Hive使用的是Hadoop的文件 ... -
hive 在mysql中创建备用数据库
2014-08-15 09:21 881修改hive-site.xml <property> ... -
HIVE 窗口及分析函数
2014-08-11 16:21 1189HIVE 窗口及分析函数 使 ... -
hive 内置函数
2014-08-11 09:06 30701.sort_array(): sort_array(arra ... -
hive lateral view
2014-08-09 14:59 2026通过Lateral view可以方便的将UDTF得到的行转列的 ... -
hive数据的导出
2014-07-28 21:53 445在本博客的《Hive几种数据导入方式》文章中,谈到了Hive中 ... -
hive udaf
2014-07-25 16:11 755package com.lwz.udaf; import o ... -
hive自定义InputFormat
2014-07-25 09:13 862自定义分隔符 package com.lwz.inputf; ... -
hive 常用命令
2014-07-17 22:22 6961.hive通过外部设置参数传入脚本中: hiv ... -
CouderaHadoop中hive的Hook扩展
2014-07-16 21:18 3338最近在做关于CDH4.3.0的hive封装,其中遇到了很多问题 ... -
利用SemanticAnalyzerHook回过滤不加分区条件的Hive查询
2014-07-16 16:43 1468我们Hadoop集群中将近百分之80的作业是通过Hive来提交 ... -
hive 的常用命令
2014-07-16 10:07 0设置、查看hive当前的角色: set sys ... -
hive 授权
2014-07-15 10:51 934Hive授权(Security配置) 博客分类: Hive分 ...
相关推荐
Dubbo无法访问远程Zookeeper已注册服务的问题解决方案 在使用Dubbo框架时,可能会遇到无法访问远程Zookeeper已注册服务的问题...通过检查Zookeeper的连接情况、Dubbo的配置文件和网络连接情况,我们可以解决这个问题。
2. **Zookeeper操作** - **创建节点(create)**: 创建新的Znode,并可以设置数据、权限和是否持久化。 - **读取节点(get)**: 获取Znode的数据和元信息。 - **更新节点(set)**: 修改Znode的数据。 - **删除...
zktools是针对ZooKeeper开发的一款客户端连接工具,它使得与ZooKeeper交互变得更加便捷和高效。这款工具通常包含了一些实用的功能,如查看ZNode(ZooKeeper中的数据节点)信息,执行数据操作,监控会话状态,以及...
Java 连接 ZooKeeper 并增加 ACL 权限 ZooKeeper 是一个开源的分布式应用程序协调服务,由 Apache 软件基金会提供。它提供了许多功能,如配置管理、名字服务、分布式同步、组服务等。 Java 是一种广泛使用的编程...
为了方便开发者与Zookeeper进行交互,出现了各种实用工具,其中ZkTools是一个广受欢迎的命令行工具,它简化了对Zookeeper的操作,使得管理Zookeeper节点和数据更加便捷。 Zookeeper的主要功能包括: 1. **配置管理...
Java连接Zookeeper主要依赖于Apache ZooKeeper项目提供的Java客户端库,这个库包含了处理Zookeeper会话、操作数据节点以及监听事件的关键组件。在给定的压缩包文件中,可能包含了以下核心的jar包: 1. **zookeeper....
《ZooInspector:Zookeeper的可视化连接工具》 ZooInspector是Zookeeper生态系统中的一个实用工具,它作为一个轻量级的客户端,专为管理和监控Zookeeper集群而设计。这款工具支持在Windows和Linux操作系统上运行,...
记录一次自己碰到的问题, 亲测有效 zookeeper客户端会话频繁超时解决方案 broker无法连接客户端触发自动关闭解决方案 zookeeper客户端会话频繁超时解决方案 broker无法连接客户端触发自动关闭解决方案
在IT行业中,Zookeeper是一个广泛使用的分布式协调服务,它由Apache Hadoop项目开发,主要用于管理大量的分布式系统。在MAC操作系统上,我们有时需要对Zookeeper的节点数据进行查看和管理,这时就需要用到特定的工具...
在实际工作中,Zookeeper可视化工具可以帮助解决以下问题: - **故障排查**:当服务出现异常时,可以通过工具查看Zookeeper的状态,检查是否有数据错误或权限问题。 - **配置管理**:在分布式环境中,使用工具统一...
Zookeeper提供了诸如配置管理、命名服务、分布式同步、组服务等一系列功能,帮助开发者解决在分布式环境中常见的复杂问题。 Zookeeper运维工具,例如淘宝开源的zkweb,是为了解决Zookeeper操作的便捷性和可视化需求...
它主要用于解决分布式应用中的数据一致性问题,提供命名服务、配置管理、集群管理、分布式锁等核心功能。Zookeeper在分布式系统中的角色至关重要,是许多大规模分布式系统的基石。 **1. Zookeeper架构** Zookeeper...
3. "zookeeper连接":指客户端通过特定协议(如TCP/IP)与Zookeeper服务器建立连接,进行数据读写和状态查询等操作。 **压缩包子文件的文件名称列表:** "prettyZoo-win.msi" 是一个Windows安装程序文件,用于在...
2. **原子操作**:所有的读写操作都是原子性的,这意味着一次只能执行一个操作,不会出现并发问题,这在分布式环境下尤为重要。 3. **事件通知**:Zookeeper提供watcher机制,允许客户端设置监听某个节点的变化,当...
在`src/main/java/org/apache/zookeeper/server/NIOServerCnxnFactory.java` 文件中,`acceptConnections()` 方法是接收客户端连接的地方。 - **添加IP检查逻辑**:在该方法内部,我们可以插入IP检查的代码,通过...
但是,如果 ZooKeeper 没有正确地配置访问权限,就可能会出现未授权访问的问题,本文将为读者提供 ZooKeeper 未授权访问修复建议。 一、 ZooKeeper 访问权限配置 ZooKeeper 的访问权限配置是通过 ACL(Access ...
描述中提到的“启动bat脚本,输入连接ip”,这通常是指在Windows环境下,使用Zookeeper提供的zkServer.cmd脚本来启动服务,然后通过zkCli.cmd客户端工具连接到Zookeeper服务器。连接时,用户需要输入Zookeeper服务器...
1. **分布式协调服务**:Zookeeper 可以用来解决分布式系统中的许多常见问题,例如负载均衡、故障恢复等。 2. **消息队列管理**:利用 Zookeeper 的通知机制可以构建可靠的消息队列系统。 3. **服务发现**:...
为了解决这些问题,本文将介绍如何在 ZooKeeper 中增加权限登录验证,以限制访问 IP 地址。 一、背景知识 ZooKeeper 是一个基于 Java 的分布式协调服务,它可以为分布式应用提供配置管理、名字服务、分布式锁等...