1. HiveServer1
HiveServer是一種可選服務,允許遠端用戶端可以使用各種程式設計語言向Hive送出請求并檢索結果。HiveServer是建立在Apache ThriftTM(
http://thrift.apache.org/)之上的,是以有時會被稱為Thrift Server,這可能會導緻混亂,因為新服務HiveServer2也是建立在Thrift之上的.自從引入HiveServer2後,HiveServer也被稱為HiveServer1。
警告
HiveServer無法處理來自多個用戶端的并發請求.這實際上是HiveServer導出的Thrift接口所施加的限制,也不能通過修改HiveServer源代碼來解決。
HiveServer2對HiveServer進行了重寫,來解決這些問題,從Hive 0.11.0版本開始。建議使用HiveServer2。
從Hive1.0.0版本(以前稱為0.14.1版本)開始,HiveServer開始被删除。請切換到HiveServer2。
https://note.youdao.com/md/preview/preview.html?file=%2Fyws%2Fapi%2Fpersonal%2Ffile%2FWEBf67b7e33daab06154c2b64dd873d2fdf%3Fmethod%3Ddownload%26read%3Dtrue#2-hiveserver2 2. HiveServer2
https://note.youdao.com/md/preview/preview.html?file=%2Fyws%2Fapi%2Fpersonal%2Ffile%2FWEBf67b7e33daab06154c2b64dd873d2fdf%3Fmethod%3Ddownload%26read%3Dtrue#21-%E5%BC%95%E5%85%A5 2.1 引入
HiveServer2(HS2)是一種能使用戶端執行Hive查詢的服務。 HiveServer2是HiveServer1的改進版,HiveServer1已經被廢棄。HiveServer2可以支援多用戶端并發和身份認證。旨在為開放API用戶端(如JDBC和ODBC)提供更好的支援。
HiveServer2單程序運作,提供組合服務,包括基于Thrift的Hive服務(TCP或HTTP)和用于Web UI的Jetty Web伺服器。
https://note.youdao.com/md/preview/preview.html?file=%2Fyws%2Fapi%2Fpersonal%2Ffile%2FWEBf67b7e33daab06154c2b64dd873d2fdf%3Fmethod%3Ddownload%26read%3Dtrue#22-%E6%9E%B6%E6%9E%84 2.2 架構
基于Thrift的Hive服務是HiveServer2的核心,負責維護Hive查詢(例如,從Beeline)。Thrift是建構跨平台服務的RPC架構。其堆棧由4層組成:server,Transport,Protocol和處理器。可以在
https://thrift.apache.org/docs/concepts找到有關分層的更多詳細資訊。
https://note.youdao.com/md/preview/preview.html?file=%2Fyws%2Fapi%2Fpersonal%2Ffile%2FWEBf67b7e33daab06154c2b64dd873d2fdf%3Fmethod%3Ddownload%26read%3Dtrue#221-server 2.2.1 Server
HiveServer2在TCP模式下使用TThreadPoolServer(來自Thrift),在HTTP模式下使用Jetty Server。
TThreadPoolServer為每個TCP連接配接配置設定一個工作線程。即使連接配接處于空閑狀态,每個線程也始終與連接配接相關聯。是以,由于大量并發連接配接産生大量線程,進而導緻潛在的性能問題。在将來,HiveServer2可能切換到TCP模式下的另一個不同類型的Server上,例如TThreadedSelectorServer。
https://note.youdao.com/md/preview/preview.html?file=%2Fyws%2Fapi%2Fpersonal%2Ffile%2FWEBf67b7e33daab06154c2b64dd873d2fdf%3Fmethod%3Ddownload%26read%3Dtrue#222-transport 2.2.2 Transport
如果用戶端和伺服器之間需要代理(例如,為了負載均衡或出于安全原因),則需要HTTP模式。這就是為什麼它與TCP模式被同樣支援的原因。可以通過Hive配置屬性
hive.server2.transport.mode
指定Thrift服務的傳輸模式。
https://note.youdao.com/md/preview/preview.html?file=%2Fyws%2Fapi%2Fpersonal%2Ffile%2FWEBf67b7e33daab06154c2b64dd873d2fdf%3Fmethod%3Ddownload%26read%3Dtrue#223-protocol 2.2.3 Protocol
協定責序列化和反序列化。HiveServer2目前正在使用
TBinaryProtocol
作為Thrift的協定進行序列化。 在未來,可以更多考慮其他協定,如TCompactProtocol,可以考慮更多的性能評估。
https://note.youdao.com/md/preview/preview.html?file=%2Fyws%2Fapi%2Fpersonal%2Ffile%2FWEBf67b7e33daab06154c2b64dd873d2fdf%3Fmethod%3Ddownload%26read%3Dtrue#224-%E5%A4%84%E7%90%86%E5%99%A8 2.2.4 處理器
處理流程是處理請求的應用程式邏輯。例如,
ThriftCLIService.ExecuteStatement()
方法實作了編譯和執行Hive查詢的邏輯。
https://note.youdao.com/md/preview/preview.html?file=%2Fyws%2Fapi%2Fpersonal%2Ffile%2FWEBf67b7e33daab06154c2b64dd873d2fdf%3Fmethod%3Ddownload%26read%3Dtrue#23-%E4%BE%9D%E8%B5%96 2.3 依賴
- Metastore metastore可以配置為嵌入式(與HiveServer2相同的過程)或遠端伺服器(也是基于Thrift的服務)。 HS2與查詢編譯所需的中繼資料相關。
- Hadoop cluster HiveServer2準備了各種執行引擎(MapReduce/Tez/Spark)的實體執行計劃,并将作業送出到Hadoop叢集執行。
https://note.youdao.com/md/preview/preview.html?file=%2Fyws%2Fapi%2Fpersonal%2Ffile%2FWEBf67b7e33daab06154c2b64dd873d2fdf%3Fmethod%3Ddownload%26read%3Dtrue#3-jdbc-client 3. JDBC Client
推薦使用JDBC驅動程式讓用戶端與HiveServer2進行互動。請注意,有一些用例(例如,Hadoop Hue),直接使用Thrift用戶端,而沒有使用JDBC。 以下是進行第一次查詢所涉及的一系列API調用:
- JDBC用戶端(例如,Beeline)通過初始化傳輸連接配接(例如,TCP連接配接),再調用OpenSession API來擷取SessionHandle來建立HiveConnection。 會話是從伺服器端建立的。
- 執行HiveStatement(遵循JDBC标準),并且Thrift用戶端調用ExecuteStatement API。 在API調用中,SessionHandle資訊與查詢資訊一起傳遞給伺服器。
- HiveServer2伺服器接收請求,并讓驅動程式(CommandProcessor)進行查詢解析和編譯。該驅動程式啟動背景工作,将與Hadoop互動,然後立即向用戶端傳回響應。這是ExecuteStatement API的異步設計。響應包含從伺服器端建立的OperationHandle。
- 用戶端使用OperationHandle與HiveServer2互動以輪詢查詢執行的狀态。
原文:
https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Overview#HiveServer2Overview-Introduction