Hive 系統架構
下圖顯示了 Hive 的主要組成模塊。
1、用戶接口: shell/CLI, jdbc/odbc, webui Command Line Interface
CLI,Shell 終端命令行(Command Line Interface),採用交互形式使用 Hive 命令行與 Hive 進行交互,最常用(學習,調試,生產)。
JDBC/ODBC,是 Hive 基於 JDBC 操作提供的客戶端,用戶(開發員,運維人員)通過這連接至 Hive server 服務。
Web UI,通過瀏覽器訪問 Hive。
2、跨語言服務 : thrift server 提供了一種能力
讓用戶可以使用多種不同的語言來操縱hive。
Thrift 是 Facebook 開發的一個軟件框架,可以用來進行可擴展且跨語言的服務的開發, Hive 集成了該服務,能讓不同的編程語言調用 Hive 的接口。
3、底層的Driver: 驅動器Driver,編譯器Compiler,優化器Optimizer,執行器Executor
Driver 組件完成 HQL 查詢語句從詞法分析,語法分析,編譯,優化,以及生成邏輯執行計劃的生成。生成的邏輯執行計劃存儲在 HDFS 中,並隨後由 MapReduce 調用執行。
Hive 的核心是驅動引擎, 驅動引擎由四部分組成:
(1) 解釋器:解釋器的作用是將 HiveSQL 語句轉換為抽象語法樹(AST)
(2) 編譯器:編譯器是將語法樹編譯為邏輯執行計劃
(3) 優化器:優化器是對邏輯執行計劃進行優化
(4) 執行器:執行器是調用底層的運行框架執行邏輯執行計劃
4、元數據存儲系統 : RDBMS MySQL
元數據,通俗的講,就是存儲在 Hive 中數據的描述信息。
Hive 中的元數據通常包括:表的名字,表的列和分區及其屬性,表的屬性(內部表和外部表),表的數據所在目錄。
Metastore 默認存在自帶的 Derby 數據庫中。缺點就是不適合多用戶操作,並且數據存儲目錄不固定。數據庫跟著 Hive 走,極度不方便管理。
解決方案:通常存我們自己創建的 MySQL 庫(本地或遠程)。Hive 和 MySQL 之間通過 MetaStore 服務交互。
獲取更多Hadoop、HDFS、HBase、MapReduce、YARN、Hive等等技術內容,可訪問Hadoop大數據技術專欄。
閱讀更多 軟件架構 的文章