Hive 使用陷阱(Lock table) 排查过程

前言

业务部门使用python经过hive thrift api作数据统计,早段时间发如今频繁建立表的时候,接口会卡死。通过一番的排查,是由于hive的lock table manager特性对于hive server的接口服务不兼容,解决办法:1)取消lock table manager特性,实际在hive server上lock table也没有做用。 2)使用hive server 2,这个是cloudera公司开发的玩意,可是暂时hive server 2没有提供跨语言的thrift,因此之前的python代码没法使用了。 在咱们的环境中仍是须要使用python,因此就直接把lock table manager取消了。下面说说排查过程。java

排查过程

1.查看业务python程序的日志,lock上了python

HiveServerException: HiveServerException(errorCode=10, message='Query returned non-zero code: 10, cause: FAILED: Error in acquiring locks: Locks on the underlying objects cannot be acquired. retry after some time', SQLState='42000')

2.查看hive server的日志,和zookeeper服务创建不了链接了api

2013-08-08 10:51:28,196 WARN  zookeeper.ClientCnxn (ClientCnxn.java:run(1089)) - Session 0x0 for server dn241.kis.hadoop.cn/172.28.29.241:2181, unexpected error, closing socket connection and attempting reconnect

3.查看一下zookeeper服务器日志,提示已经到达zookeeper容许的最大链接了bash

2013-08-08 12:25:16,647 [myid:2] - WARN  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@193] - Too many connections from /172.28.26.83 - max is 50

4.那回到hive server看是否都是它说建立的链接服务器

#查看一下hive server的pid号,这里是2744

ps axu |grep hive

#查看一下hive server创建的链接数,果真与zookeeper都创建了50个链接

lsof -p 2744 |grep -i tcp |grep dn240 |wc -l

50

lsof -p 2744 |grep -i tcp |grep dn241 |wc -l 

50

5.那肯定了问题,如何改善呢。增长zookeeper容许的单IP最大链接数并发

修改zookeeper配置文件(/etc/zookeeper/conf/zoo.cfg)socket

maxClientCnxns=200

minSessionTimeout=1000

maxSessionTimeout=60000

6.确实zookeeper的链接到达200了,可是问题是每次跑完hive查询,hive server与zookeeper的链接都不会释放,那链接数只会一直的累加,调大链接数不是解决根本的方法tcp

7.查看相关文档,发现hive server 与 hive server 2的区别是,hive server 2是提供并发链接,而lock table manager也是为了处理并发的。那在咱们的应用中每次查询都是建立一个实例去作,只有一个链接,那这个特性对于咱们的应用来讲是没有用的。那我把特性给取消了,注释了如下配置文件,并重启hive serveroop

<property>
  <name>hive.support.concurrency</name>
  <description>Enable Hive's Table Lock Manager Service</description>
  <value>true</value>
</property>
<property>
  <name>hive.zookeeper.quorum</name>
  <description>Zookeeper quorum used by Hive's Table Lock Manager</description>
  <value>dn240.kis.hadoop.cn,dn241.kis.hadoop.cn</value>
</property>

8.取消后,业务正常运行,且hive server再也不与zookeeper创建链接,问题解决。ui

相关文章
相关标签/搜索