Hive學習記錄01—基本概念
Hive基本概念
Hive
- Hive:由 Facebook 開源用於解決海量結構化日誌的數據統計。
- Hive 是基於 Hadoop 的一個數據倉庫工具,可以將結構化的數據文件映射爲一張表,並提供類 SQL 查詢功能。
- 本質是:將 HQL 轉化成 MapReduce 程序
注意
- 1)Hive 處理的數據存儲在 HDFS
- 2)Hive 分析數據底層的默認實現是 MapReduce
- 3)執行程序運行在 Yarn 上
Hive優缺點
優點
- 操作接口採用類 SQL 語法,提供快速開發的能力(簡單、容易上手)。
- 避免了去寫 MapReduce,減少開發人員的學習成本。
- Hive 的執行延遲比較高,因此 Hive 常用於數據分析,對實時性要求不高的場合。
- Hive 優勢在於處理大數據,對於處理小數據沒有優勢,因爲 Hive 的執行延遲比較
高。 - Hive 支持用戶自定義函數,用戶可以根據自己的需求來實現自己的函數。
缺點
- 迭代式算法無法表達
- 數據挖掘方面不擅長
- Hive 自動生成的 MapReduce 作業,通常情況下不夠智能化
- Hive 調優比較困難,粒度較粗
Hive架構原理
- 用戶接口:Client
CLI(hive shell)、JDBC/ODBC(java 訪問 hive)、WEBUI(瀏覽器訪問 hive) - 元數據:Metastore
元數據包括:表名、表所屬的數據庫(默認是 default)、表的擁有者、列/分區字段、表
的類型(是否是外部表)、表的數據所在目錄等;
默認存儲在自帶的 derby 數據庫中,推薦使用 MySQL 存儲 Metastore - Hadoop
使用 HDFS 進行存儲,使用 MapReduce 進行計算。 - 驅動器:Driver
(1) 解析器(SQL Parser):將 SQL 字符串轉換成抽象語法樹 AST,這一步一般都用
第三方工具庫完成,比如 antlr;對 AST 進行語法分析,比如表是否存在、字段是否存
在、SQL 語義是否有誤。
(2) 編譯器(Physical Plan):將 AST 編譯生成邏輯執行計劃。
(3) 優化器(Query Optimizer):對邏輯執行計劃進行優化。
(4) 執行器(Execution):把邏輯執行計劃轉換成可以運行的物理計劃。對於 Hive 來
說,就是 MR/Spark。
運行機制
Hive 通過給用戶提供的一系列交互接口,接收到用戶的指令(SQL),使用自己的 Driver,結合元數據(MetaStore),將這些指令翻譯成 MapReduce,提交到 Hadoop 中執行,最後,將執行返回的結果輸出到用戶交互接口。
Hive和傳統數據庫比較
- Hive採用的類似SQL的查詢語言HQL。雙方都可以用SQL進行操作
- Hive數據存儲在HDFS中。數據庫則將數據存儲在塊設備或本地文件系統中。
- Hive針對數據倉庫應用設計的,特點是讀多寫少。數據庫中數據需要常進行修改操作。
- Hive中沒有索引,不適合進行實時查詢。傳統數據庫存在索引。
- Hive查詢執行通過MapReduce。數據庫是通過自己的數據庫執行引擎。
- Hive掃描全表,延遲高。數據庫在一定數據量內延遲較低,在面對大容量數據規模,Hive處理速度會快。
- Hive拓展性高。傳統數據庫拓展性低。
- Hive支持大規模數據。傳統數據庫數據規模較小。