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

相關文章
相關標籤/搜索