如何:优化Hive ZooKeeper Lock Manager实施
Hive一直使用ZooKeeper作為分布式鎖定管理器來支持HiveServer2中的并發。 基于ZooKeeper的鎖管理器在小型環境中運行良好。 但是,隨著越來越多的用戶從HiveServer遷移到HiveServer2并開始創建大量并發會話,可能會出現問題。 主要問題是Hiveserver2和ZooKeeper之間打開的連接數一直在增加,直到從ZooKeeper服務器端達到連接限制為止。 此時,ZooKeeper開始拒絕新的連接,并且所有依賴ZooKeeper的流都變得不可用。 為了解決這個問題,已經開放了多個Hive JIRA(例如HIVE-4132,HIVE-5853和HIVE-8135等),并且最近通過HIVE-9119對其進行了修復。
讓我們仔細看一下Hive中的ZooKeeperHiveLockManager實現,看看它為什么以前引起問題,以及我們如何解決它。
ZooKeeperLockManager使用簡單的ZooKeeper API來實現分布式鎖。 下面列出了它使用的協議。
希望獲得共享鎖的客戶端應執行以下操作:
希望獲得排他鎖的客戶應執行以下操作:
希望釋放鎖的客戶端應該只刪除他們在步驟1中創建的節點。此外,如果所有子節點都已刪除,則也要刪除父節點。
上面的鎖定和解鎖協議非常簡單明了。 但是,該協議的先前實現未正確使用ZooKeeper客戶端。 對于每個Hive查詢,都會創建一個新的ZooKeeper客戶端實例來獲取和釋放鎖。 這給ZooKeeper服務器處理新的連接帶來了很多開銷。 另外,在多會話環境中,如果并發查詢太多,很容易達到ZooKeeper服務器連接限制。 此外,當用戶使用Hue進行Hive查詢時,也會發生這種情況。 色相默認情況下不會關閉Hive查詢,這意味著為該查詢創建的ZooKeeper客戶端永遠不會關閉。 如果查詢量很大,則可以很快達到ZooKeeper連接限制。
我們是否真的需要為每個查詢創建一個新的ZooKeeper客戶端? 我們發現沒有必要。 從上面的討論中,我們可以看到HiveServer2使用ZooKeeper客戶端與ZooKeeper服務器進行通信,以便能夠獲取和釋放鎖。 主要工作量在ZooKeeper服務器端,而不是客戶端。 一個HiveKeeper客戶端可以由針對HiveServer2服務器的所有查詢共享。 使用Singleton ZooKeeper客戶端,可以消除處理連接的服務器開銷。 Hue用戶不再受ZooKeeper連接問題的困擾。
Singleton ZooKeeper客戶端能夠解決鎖定管理問題。 但是,我們仍然需要直接使用ZooKeeper客戶端來處理一些額外的事情,例如:
- 初始連接:ZooKeeper客戶端和服務器握手需要一些時間。 ZooKeeperHiveLockManager使用的同步方法調用(例如create(),getChildren(),delete())將在此握手尚未完成時引發異常。 在這種情況下,我們需要一個鎖存器來控制ZooKeeper客戶端何時開始向服務器發送方法調用。
- 斷開連接和故障轉移:如果Singleton ZooKeeper客戶端失去與服務器的連接,我們需要處理連接重試并將故障轉移到集群中的另一臺服務器。
- 會話超時:如果發生連接會話超時,則需要關閉單例ZooKeeper客戶端并重新創建。
Apache Curator是開源軟件,能夠透明地處理所有上述情況。 Curator是Netflix的ZooKeeper庫,它提供了簡化使用ZooKeeper的高級API-CuratorFramework。 通過在新的ZooKeeperHiveLockManager實現中使用單例CuratorFramework實例,我們不僅解決了ZooKeeper連接問題,而且使代碼易于理解和維護。
感謝Hive開源社區將此修復程序包含在Apache Hive 1.1中。 最新的Hive 0.12和Hive 0.13版本以及即將發布的MapR Distribution的 Hive 1.0版本中也包含此修復程序。
參考文獻:
- ZooKeeper:http: //zookeeper.apache.org/
- 策展人: http : //curator.apache.org/
相關的JIRAS:
- HIVE-4132: https : //issues.apache.org/jira/browse/HIVE-4132
- HIVE-5853: https : //issues.apache.org/jira/browse/HIVE-5853
- HIVE-8135: https : //issues.apache.org/jira/browse/HIVE-8135
- HIVE-9119: https ://issues.apache.org/jira/browse/HIVE-9119
翻譯自: https://www.javacodegeeks.com/2015/02/refine-hive-zookeeper-lock-manager-implementation.html
總結
以上是生活随笔為你收集整理的如何:优化Hive ZooKeeper Lock Manager实施的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 青少年年龄段划分标准 青少年年龄段划分标
- 下一篇: JBoss Forge NetBeans