日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何:优化Hive ZooKeeper Lock Manager实施

發布時間:2023/12/3 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何:优化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來實現分布式鎖。 下面列出了它使用的協議。

希望獲得共享鎖的客戶端應執行以下操作:

  • 調用create()創建一個路徑名稱為“ _lockresource_ / lock-shared-”且設置了序列標志的節點。
  • 在不設置監視標志的情況下,在節點上調用getChildren()。
  • 如果不存在路徑名稱以“ lock-exclusive-”開頭的子代,則客戶端將獲取該鎖并退出。
  • 否則,調用delete()來刪除它們在步驟1中創建的節點,休眠一個預定義的時間段,然后通過執行步驟1直到達到最大重試次數來進行重試。
  • 希望獲得排他鎖的客戶應執行以下操作:

  • 調用create()創建一個路徑名稱為“ _lockresource_ / lock-exclusive-”且已設置序列標志的節點。
  • 在不設置監視標志的情況下,在節點上調用getChildren()。
  • 如果沒有序號比在步驟1中創建的節點低的子級,則客戶端獲取鎖并退出。
  • 否則,調用delete()來刪除它們在步驟1中創建的節點,休眠一個預定義的時間段,然后通過執行步驟1直到達到最大重試次數來進行重試。
  • 希望釋放鎖的客戶端應該只刪除他們在步驟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实施的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。