1. 程式人生 > >Hive基礎架構

Hive基礎架構

結構化數據 轉換 mys 能力 reduce sele 文件映射 適合 shel

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基礎架構