如下圖所示,從邏輯上來看,Hive包含了3大部分。
用戶操作Hive的接口主要有三個:CLI,Client 和 WUI。
其中最常用的是CLI,Cli啟動的時候,會同時啟動一個Hive副本。
Client是Hive的客戶端,用戶連接至Hive Server。在啟動 Client模式的時候,需要指出Hive Server所在節點,并且在該節點啟動Hive Server。而客戶端則又可以分為三種Thrift Client,JDBC Client,ODBC Client。
Web Interface是通過瀏覽器訪問Hive。
實現了session handler,在JDBC/ODBC接口上實現了執行和獲取信息的API。
該組件用于對不同的查詢表達式做解析查詢,語義分析,最終會根據從metastore中查詢到的表和分區元數據生成一個execution plain。
該組件會執行由compiler創建的execution。其中plan從數據結構上來看,是一個DAG,該組件會管理plan的不同stage與組件中執行這些plan之間的依賴。
Hive的metastore組件是hive元數據集中存放地。該組件存儲了包括變量表中列和列類型等結構化的信息以及數據倉庫中的分區信息(包括列和列類型信息,讀寫數據時必要的序列化和反序列化信息,數據被存儲在HDFS文件中的位置)。
Metastore組件包括兩個部分:metastore services和Meta storage database。
使用遠程的metastore services,可以讓metastore services和hive services運行在不同的進程里,這樣也保證了hive的穩定性,提升了hive services的效率。
流程大致步驟為:
解析用戶提交的Hive語句->對其進行解析->分解為表、字段、分區等Hive對象
根據解析到的信息構建對應的表、字段、分區等對象,從SEQUENCE_TABLE中獲取構建對象的最新的ID,與構建對象信息(名稱、類型等等)一同通過DAO方法寫入元數據庫的表中,成功后將SEQUENCE_TABLE中對應的最新ID+5。
實際上常見的RDBMS都是通過這種方法進行組織的,其系統表中和Hive元數據一樣顯示了這些ID信息。通過這些元數據可以很容易的讀取到數據。
優化器是一個不斷更新的組件,大部分plan的轉移都是通過優化器完成的。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。