Hive基礎架構
Hive
由Facebook開源用於解決海量結構化日誌的數據統計:
Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射成一張表,並提供類SQL查詢功能;
構建在Hadoop之上的數據倉庫:
* 使用HQL作為查詢接口
* 處理的數據存儲在HDFS
* 分析數據底層實現MapReduce
* 執行程序運行的YARN
本質是:將HQL轉化成MapReduce程序
靈活性和擴展性比較好,支持UDF,自定義存儲格式等。
適合離線數據處理。
Hive架構如下圖:
> 用戶接口:Client
CLI(hive shell)、JDBC/ODBC(java訪問hive),WEBUI(瀏覽器訪問hive)
> 元數據:Metastore
元數據包括:表名、表所屬的數據庫(默認是default)、表的擁有者、列/分區字段、表的類型(是否是外部表)、表的數據所在目錄等;
默認存儲在自帶的 derby數據庫中,推薦使用采用MySQL存儲Metastore;
>Hadoop
使用HDFS進行存儲,使用MapReduce進行計算。
> 驅動器: Driver
包含:解析器、編譯器、優化器、執行器;
解析器:將SQL字符串轉換成抽象語法樹AST,這一步一般都用第二方工具庫完成,比如antlr;對AST進行方法分析,比如表是否存在、字段是否存在、SQL語義是否有誤(比如select中被判定為聚合的字段在group by 中是否有出現);
編譯器:將AST編譯成邏輯執行計劃;
優化器:對邏輯執行計劃進行優化;
執行器:把邏輯執行計劃轉換成可以運行的物理計劃。對Hive來說,就是MR/TEZ/Spark;
Hive優點與使用場景
操作接口采用類SQL語法,提供快速開發的能力(簡單、容易上手);
避免了去寫MapReduce, 減少開發人員的學習成本;
統一的元數據管理,可與impala/spark等共享元數;
易擴展(hdfs+mapreduce:可以擴展集群規模,支持自定義函數);
數據的離線處理:比如:日誌分析,海量結構化數據離線分析...........
Hive的執行延遲比較高,因此hive常用於數據分析的,對實時性要求不高的場合;
Hive優勢在於處理大數據,對於處理小數據沒有優勢,因為Hive的執行延遲比較高;
Hive基礎架構