文档章节

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

kisops
 kisops
发布于 2013/08/11 21:21
字数 684
阅读 9047
收藏 26

前言

业务部门使用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取消了。下面说说排查过程。

排查过程

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

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服务建立不了连接了

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允许的最大连接了

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)

maxClientCnxns=200

minSessionTimeout=1000

maxSessionTimeout=60000

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

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

<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建立连接,问题解决。

© 著作权归作者所有

kisops
粉丝 29
博文 33
码字总数 21717
作品 0
珠海
系统管理员
私信 提问
加载中

评论(6)

x
xpmars
解决大问题!
yangqijun
yangqijun
那 hiveserver2 这个锁的问题怎么解决呢?
吐槽的达达仔
吐槽的达达仔

引用来自“snakelxc”的评论

引用来自“吐槽的达达仔”的评论

为啥不用hive的内嵌map reduce功能使用Python 脚本呢?

还是说,楼主的hive thrift 接口是面向python系统对接的?
hiveserver2给力多了,不仅并发,还有权限认证呢。

是的,业务逻辑整个都是Py,切合到实际应用,这种解决办法成本最低了。

果然是这样~~
当然,也可以考虑用Java写个中间件啥的~~
anglix
anglix

引用来自“吐槽的达达仔”的评论

为啥不用hive的内嵌map reduce功能使用Python 脚本呢?

还是说,楼主的hive thrift 接口是面向python系统对接的?
hiveserver2给力多了,不仅并发,还有权限认证呢。

那 hiveserver2 这个锁的问题怎么解决呢?
snakelxc
snakelxc

引用来自“吐槽的达达仔”的评论

为啥不用hive的内嵌map reduce功能使用Python 脚本呢?

还是说,楼主的hive thrift 接口是面向python系统对接的?
hiveserver2给力多了,不仅并发,还有权限认证呢。

是的,业务逻辑整个都是Py,切合到实际应用,这种解决办法成本最低了。
吐槽的达达仔
吐槽的达达仔
为啥不用hive的内嵌map reduce功能使用Python 脚本呢?

还是说,楼主的hive thrift 接口是面向python系统对接的?
hiveserver2给力多了,不仅并发,还有权限认证呢。
Hive 使用陷阱(Lock table) 排查过程

前言 业务部门使用python通过hive thrift api做数据统计,早段时间发现在频繁创建表的时候,接口会卡死。经过一番的排查,是因为hive的lock table manager特性对于hive server的接口服务不兼...

snakelxc
2013/08/11
0
1
Hive Transaction 事务性 小试

提到Hive一般都会想到,Hive是数据仓库,支持类SQL查询,有很多语法支持,可以嵌套MR,写Transform、写UDF/UDAF等,但是,不支持更新操作。所以Hive的常见也一般都是一次写入,频繁读取。从H...

王二铁
2016/07/14
3K
5
Hive权限控制和超级管理员的实现

Hive权限控制 Hive权限机制: Hive从0.10可以通过元数据控制权限。但是Hive的权限控制并不是完全安全的。基本的授权方案的目的是防止用户不小心做了不合适的事情。 先决条件: 为了使用Hive的...

蘑菇街隐修
2013/06/20
0
0
hive join ..on连接中 and与where的取舍

HiveQL与标准SQL的区别: 陷阱1: SELECT * FROM first_table t1 JOIN second_table t2 ON t1.id = t2.id where t1.date = "2016-06-01" 在hive里面,没有SQL优化器,则这样些的后果是,直接......

骑着小猪啪啪啪
2018/01/04
0
0
从SQL到HiveQL应改变的几个习惯

2009-10-30 @ taobao 引言 别名 虚拟列 IN INNER JOIN 分号字符 Insert Merge IS [NOT] NULL 引言 HiveQL非常像SQL,但二者并非等价,若不注意期间的一些差异,容易导致HiveQL的语义错误,或...

zhongl
2011/09/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

数组算法

/*数组的相关的算法操作:1、在数组中找最大值/最小值*/class Test11_FindMax{public static void main(String[] args){int[] array = {4,2,6,8,1};//在数组中找最大...

architect刘源源
28分钟前
1
0
okhttp3 以上版本在安卓9.0无法请求数据的解决方案

应用官方的说明:在 Android 6.0 中,我们取消了对 Apache HTTP 客户端的支持。 从 Android 9 开始,默认情况下该内容库已从 bootclasspath 中移除且不可用于应用。且Android P 限制了明文流量...

chenhongjiang
今天
5
0
简单示例:NodeJs连接mysql数据库

开篇引用网上的说法: 简单的说 Node.js 就是运行在服务端的 JavaScript。Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。Node.js是一个事件驱动I/O服务端JavaScript环境,基于...

李朝强
今天
8
0
大数据学习路线

年薪30W大数据学习路线图: 一、Hadoop入门,了解什么是Hadoop 1、Hadoop产生背景 2、Hadoop在大数据、云计算中的位置和关系 3、国内外Hadoop应用案例介绍 4、国内Hadoop的就业情况分析及课程...

陈小君
今天
3
0
解读 Kylin 3.0.0 | 更敏捷、更高效的 OLAP 引擎

在近期的 Apache Kylin Meetup 成都站上,我们邀请到 Kyligence 架构师 & Apache Kylin Committer 倪春恩对 Kylin 3.0.0 版本的一些重要功能及改进从使用到原理进行了介绍: Apache Kylin 在...

ApacheKylin
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部