一、什麼是hivejava
Hive是一個基於Hadoop的數據倉庫,能夠將結構化數據映射成一張表,並提供類SQL的功能,最初由Facebook提供,使用HQL做爲查詢接口、HDFS做爲存儲底層、mapReduce做爲執行層,設計目的是讓SQL技能良好,但Java技能較弱的分析師能夠查詢海量數據,2008年facebook把Hive項目貢獻給Apache。Hive提供了比較完整的SQL功能(本質是將SQL轉換爲MapReduce),自身最大的缺點就是執行速度慢。Hive有自身的元數據結構描述,能夠使用MySql\ProstgreSql\oracle 等關係型數據庫來進行存儲,但請注意Hive中的全部數據都存儲在HDFS中。Hive具備比較好的靈活性和擴展性,支持UDF,自定義存儲格式,適合離線數據處理。Hive在hadoop生態系統中地位以下圖所示:shell
二、hive的架構數據庫
用戶接口:client瀏覽器
CLI(hive shell)、JDBC/ODBC(java訪問hive),WEBUI(瀏覽器訪問hive)數據結構
元數據:metastore架構
元數據包括:表名、表所屬數據庫、表的擁有者、列/分區字段、表的類型、表數據所在目錄。oracle
Hadoop函數
使用hdfs進程數據存儲,運行在yarn上,使用mapreduce進行計算。工具
驅動器:dirveroop
包含:解析器、編譯器、優化器、執行器
解析器:將SQL字符串轉換成抽象語法樹AST,這一步通常都是用第三方工具庫完成,好比antlr;對AST語法樹進行分析,好比表否存在、字段是否存在、SQL語義是否有誤。
編譯器:將AST編譯生成邏輯執行計劃。
優化器:對邏輯執行計劃進行優化。
執行器:把邏輯執行計劃轉換成物理執行計劃。對於hive來講,就是MR/TEZ/Spark;
三、hive的優勢及使用場景
1)操做接口使用SQL語法,提供快速開發的能力。
2)避免了去屑mapreduce,減小開發人員學習成本。
3)統一元數據管理,可與impala/spark等共享元數據。
4)因底層基於hadoop,易於擴展,支持自定義函數UDF。
5)數據離線處理,好比日誌分析,海量數據結構化分析。
6)Hive執行延遲比較高,適合於作離線分析處理,不適合實時查詢。
7)Hive優點在於處理大數據集,對於小數據集沒有優點。