一、概述
??Hive是hadoop集群中一個(gè)數(shù)據(jù)倉(cāng)庫(kù),可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張表,并提供類似SQL的查詢功能,其本質(zhì)就是將HQL轉(zhuǎn)化成mapreduce程序。

Hive處理的數(shù)據(jù)存儲(chǔ)在HDFS ,Hive分析數(shù)據(jù)底層實(shí)現(xiàn)是MapReduce,Hive執(zhí)行程序是運(yùn)行在yarn上
Hive優(yōu)點(diǎn):
? ? 1)操作接口采用類SQL語(yǔ)法,上手容易,避免寫MapReduce,減少學(xué)習(xí)成本
? ? 2)Hive的執(zhí)行延遲比較高,因此Hive常用于對(duì)實(shí)時(shí)性不高的場(chǎng)合
? ? 3)Hive處理大數(shù)據(jù)有優(yōu)勢(shì),不擅長(zhǎng)小數(shù)據(jù),處理小數(shù)據(jù)執(zhí)行延遲比較高
? ? 4)Hive支持用戶自定義函數(shù),用戶可以根據(jù)自己需求來(lái)實(shí)現(xiàn)自己的函數(shù)
Hive缺點(diǎn):
? ? 1)Hive的HQL表達(dá)能力有限,比如迭代式計(jì)算無(wú)法表達(dá),數(shù)據(jù)挖掘方面不擅長(zhǎng)
? ? 2)Hive的效力比較低,因?yàn)镠ive調(diào)優(yōu)比較困難,粒度較粗。還有,Hive自動(dòng)生成的MapReduce作業(yè),通常情況下不夠智能化???
二、Hive架構(gòu)原理

1.用戶接口:Client
????CLI(hive shell)、JDBC/ODBC(java訪問hive)、WEBUI(瀏覽器訪問hive)
2.元數(shù)據(jù):Metastore
元數(shù)據(jù)包括:表名、表所屬的數(shù)據(jù)庫(kù)(默認(rèn)是default)、表的擁有者、列/分區(qū)字段、表的類型(是否是外部表)、表的數(shù)據(jù)所在目錄等;
默認(rèn)存儲(chǔ)在自帶的derby數(shù)據(jù)庫(kù)中,推薦使用MySQL存儲(chǔ)Metastore
3.Hadoop
使用HDFS進(jìn)行存儲(chǔ),使用MapReduce進(jìn)行計(jì)算。
4 .? 驅(qū)動(dòng)器:Driver
(1)解析器(SQL Parser):將SQL字符串轉(zhuǎn)換成抽象語(yǔ)法樹AST,這一步一般都用第三方工具庫(kù)完成,比如antlr;對(duì)AST進(jìn)行語(yǔ)法分析,比如表是否存在、字段是否存在、SQL語(yǔ)義是否有誤。
(2)編譯器(Physical Plan):將AST編譯生成邏輯執(zhí)行計(jì)劃。
(3)優(yōu)化器(Query Optimizer):對(duì)邏輯執(zhí)行計(jì)劃進(jìn)行優(yōu)化。
(4)執(zhí)行器(Execution):把邏輯執(zhí)行計(jì)劃轉(zhuǎn)換成可以運(yùn)行的物理計(jì)劃。對(duì)于Hive來(lái)說,就是MR/Spark

Hive通過給用戶提供的一系列交互接口,接收到用戶的指令(SQL),使用自己的Driver,結(jié)合元數(shù)據(jù)(MetaStore),將這些指令翻譯成MapReduce,提交到Hadoop中執(zhí)行,最后,將執(zhí)行返回的結(jié)果輸出到用戶交互接口。
三、Hive與數(shù)據(jù)的區(qū)別
