1. 概念
Hive 是建立在 Hadoop 上的數據倉庫工具,旨在簡化大規模數據集的查詢與管理。它通過類 SQL 語言(HiveQL)將結構化數據映射為 Hadoop 的 MapReduce,適合離線批處理,尤其適用于數據倉庫場景。
?2. 數據模型
?表(Table):邏輯數據單元,分為兩種:
? ? ? 1.內部表(Managed Table):數據由 Hive 管理,刪除表時數據及元數據均被清除。
? ?? ?2.外部表(External Table):數據存儲在 HDFS 的指定路徑,刪除表僅刪除元數據,保留數據。?
?分區(Partition):按列值(如日期)將數據劃分到不同目錄,提升查詢效率(如分區裁剪)。
?分桶(Bucket):基于哈希將數據分到固定數量的文件,優化 Join 和采樣效率。
?視圖(View):虛擬表,基于查詢結果定義,不存儲實際數據。
?3. 架構
Hive 架構分為以下核心層:
1. 用戶接口層:
?? ?CLI/JDBC/ODBC:提供命令行和遠程訪問。
?? ?HiveServer2:支持多用戶并發、認證,替代舊版 HiveServer。
?? ?Web UI(如 Hue):可視化查詢界面。
2. 元數據存儲(Metastore):
?? ?使用關系數據庫(MySQL、PostgreSQL)存儲表結構、分區等元數據。
?? ?獨立服務模式(Remote Metastore)支持高可用。
3. 驅動層(Driver):
?? ?編譯器:將 HiveQL 轉換為抽象語法樹(AST)、邏輯計劃。
?? ?優化器:執行邏輯優化(如謂詞下推、分區裁剪)。
?? ?執行引擎:生成物理計劃(MapReduce/Tez/Spark DAG)。
4. 執行層:
?? ?支持多種引擎:MapReduce(默認)、Tez(優化 DAG 執行)、Spark(內存計算)。
?? ?LLAP(Live Long and Process):守護進程緩存數據,加速交互式查詢。
5. 存儲層:
?? ?數據存儲在 HDFS 或兼容系統(如 S3)。
?? ?支持多種格式:文本、ORC(列式存儲,支持 ACID)、Parquet。
?4. 核心組件
?Hive CLI:命令行接口,適合簡單查詢。
?HiveServer2:提供 Thrift 服務,支持 JDBC/ODBC 連接。
?Metastore:獨立服務,管理元數據,支持高并發訪問。
?SerDe(Serializer/Deserializer):解析數據格式(如 JSON、CSV),如 `OpenCSVSerde`。
?Execution Engine:可插拔引擎(如 Tez 減少中間落盤,提升性能)。
?Hive Web Interface(可選):提供基礎監控界面。
Hive 通過 SQL 抽象簡化了 Hadoop 生態的數據處理,其架構圍繞元數據管理、查詢編譯優化和多引擎執行展開。隨著 Tez/Spark 引擎和 LLAP 的引入,Hive 在性能上持續改進,但仍以批處理為核心定位。理解其數據模型與組件協作,是優化 Hive 應用的關鍵。