一起了解一下HiveServer2

1. HiveServer1

在瞭解 HiveServer2 之前我們先來了解一下 HiveServer1(或者稱之爲 HiveServer)。

HiveServer 是一種可選的 Hive 內置服務,可以允許遠程客戶端使用不同編程語言向 Hive 提交請求並返回結果。HiveServer 是建立在 Apache ThriftTM(http://thrift.apache.org/) 之上的,因此有時會被稱爲 Thrift Server,這可能會導致我們認知的混亂,因爲新服務 HiveServer2 也是建立在 Thrift 之上的。自從引入 HiveServer2 後,HiveServer 也被稱爲 HiveServer1。

爲什麼有了 HiveServer,還要引入 HiveServer2 ?主要是因爲 HiveServer 有如下的侷限性:

  • 支持遠程客戶端連接,但一次只能連接一個客戶端,無法處理來自多個客戶端的併發請求。這實際上是因爲受到 HiveServer 暴露的 Thrift 接口所限制,並且不能通過修改 HiveServer 源代碼來解決。

  • 沒有會話管理的支持。

  • 不提供身份驗證支持。

從 Hive 1.0.0 版本開始,Hive 發行版中刪除了 HiveServer。需要切換到 HiveServer2。

2. HiveServer2

HiveServer2 是一種能使客戶端執行 Hive 查詢的服務。HiveServer2 是 HiveServer1 的改進版,HiveServer1 已經被廢棄。HiveServer2 對 HiveServer 進行了重寫來解決上述問題。

HiveServer2 作爲複合服在單個進程中運行,其中包括基於 Thrift 的 Hive 服務(TCP或HTTP)以及用於 Web UI的 Jetty Web 服務。HiveServer2 可以支持多客戶端併發和身份認證。旨在爲開放API客戶端(如JDBC和ODBC)提供更好的支持。

2.1 架構

HiveServer2 實現了一個新的基於 Thrift 的 RPC 接口,該接口可以處理客戶端併發請求。當前版本支持 Kerberos,LDAP 以及自定義可插拔身份驗證。新的 RPC 接口也是 JDBC 和 ODBC 客戶端更好的選擇,尤其是對於元數據訪問。

與 HiveServer1 一樣,HiveServer2 也是 Hive 執行引擎的容器。對於每個客戶端連接,都會創建一個新的執行上下文,以服務於來自客戶端的 Hive SQL 請求。新的 RPC 接口使服務器可以將 Hive 執行上下文與處理客戶端請求的線程相關聯。

2.2 依賴

  • Metastore:Metastore 可以配置爲嵌入式(與 HiveServer2 同一個進程)或者遠程服務(也是基於 Thrift 的服務)。HiveServer2 訪問 Metastore 以獲取編譯所需的元數據。

  • Hadoop 集羣:HiveServer2 爲不同執行引擎(MapReduce/Tez/Spark)提供物理執行計劃,並將作業提交到 Hadoop 集羣執行。

我們可以在下圖中找到 HiveServer2 與依賴組件之間的相互關係:

歡迎關注我的公衆號和博客:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章