HiveServer2 ZooKeeper 鏈接泄漏

昨天線上ETLJob忽然掛起,查看Hive Log異常:java

[ERROR]:Utils - FAILED: Error in acquiring locks: Locks on the underlying objectscannot be acquired. retry after some timeapache

WARNunexpected error, closing socket connection and attempting reconnectjava.io.IOException: Connection reset by peersocket

一看是獲取鎖失敗,關於Hive獲取鎖的流程簡析:ide

http://boylook.blog.51cto.com/7934327/1308139ui

在看ZK發現從這臺AgentZK的鏈接已經超過maxClientCnxns了,馬上先把ZK增長問題獲得緩解,而後開始找RCspa

出現問題的前一天修改了hive.lock.sleep.between.retries5s,是否是和這個有關係呢?每次ZKLockManagerretry前會執行prepareretry,主要是檢查前一個zk鏈接是否超時,若是沒有繼續用這個鏈接不然new一個zk鏈接,所以問題不該該是這裏.線程

再看出問題的Client上主要跑了ETL agenthiveserver2,發現鏈接都是從hiveserver2上來的,懷疑是否是由於默認的maxWorkerThreads略大了,不過workerzk的鏈接無關,只是決定了ThreadPoolExecutor的線程數,看hiveserver部分代碼最終與ZK交互的執行層面是OperationHandle,進而就是你們都熟悉的Driver run方法了,到這裏基本上纔開始進行SQL的解析運行,包括鎖的處理.server

210246344.png

而咱們使用的是CDH4.2.0,這裏有一個OperationHandle 資源泄露進而致使到ZK鏈接泄漏的一個Bugblog

https://issues.cloudera.org/browse/DISTRO-512?page=com.atlassian.jira.plugin.system.issuetabpanels%3Aall-tabpanel#issue-tabs–> HIVE-4398,在Hive0.11已經修復資源

update:https://issues.apache.org/jira/browse/HIVE-5853

相關文章
相關標籤/搜索