基礎(chǔ)性的東西务傲,不過(guò)在回答的時(shí)候要能回答出彩來(lái)
什么是Hive
- Hive是由Facebook開(kāi)源用于解決海量結(jié)構(gòu)化日志的數(shù)據(jù)統(tǒng)計(jì)杏糙;Hive是基于Hadoop的一個(gè)數(shù)據(jù)倉(cāng)庫(kù)工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射 成一張表,并提供類(lèi)SQL查詢(xún)功能吴攒,底層計(jì)算引擎默認(rèn)為Hadoop的MapReduce(本質(zhì)是將sql轉(zhuǎn)化成mapreduce程序),可以將引擎更換為Spark/Tez砂蔽;
Hive架構(gòu)
Hive架構(gòu).PNG
- 如圖中所示洼怔,Hive通過(guò)給用戶(hù)提供的一系列交互接口,接收到用戶(hù)的指令(SQL)左驾,使用自己的Driver镣隶,結(jié)合元數(shù)據(jù)(MetaStore),將這些指令翻譯成MapReduce诡右,提交到Hadoop中執(zhí)行安岂,最后,將執(zhí)行返回的結(jié)果輸出到用戶(hù)交互接口帆吻。
- 1)用戶(hù)接口:Client
- CLI(hive shell)域那、JDBC/ODBC(java訪(fǎng)問(wèn)hive)、WEBUI(瀏覽器訪(fǎng)問(wèn)hive)
- 2)元數(shù)據(jù):Metastore
- 元數(shù)據(jù)包括:表名猜煮、表所屬的數(shù)據(jù)庫(kù)(默認(rèn)是default)次员、表的擁有者、列/分區(qū)字段王带、表的類(lèi)型(是否是外部表)淑蔚、表的數(shù)據(jù)所在目錄等;
默認(rèn)存儲(chǔ)在自帶的derby數(shù)據(jù)庫(kù)中愕撰,推薦使用MySQL存儲(chǔ)Metastore - 推薦學(xué)習(xí)博客 數(shù)倉(cāng)--Hive--元數(shù)據(jù)表結(jié)構(gòu)學(xué)習(xí)
- 元數(shù)據(jù)包括:表名猜煮、表所屬的數(shù)據(jù)庫(kù)(默認(rèn)是default)次员、表的擁有者、列/分區(qū)字段王带、表的類(lèi)型(是否是外部表)淑蔚、表的數(shù)據(jù)所在目錄等;
- 3)Hadoop
- 使用HDFS進(jìn)行存儲(chǔ)刹衫,使用MapReduce進(jìn)行計(jì)算。
- 4)驅(qū)動(dòng)器:Driver
(1)解析器(SQL Parser):將SQL字符串轉(zhuǎn)換成抽象語(yǔ)法樹(shù)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)說(shuō)律歼,就是MR/Spark民镜。
Hive優(yōu)點(diǎn)
- 操作接口采用類(lèi)SQL語(yǔ)法,提供快速開(kāi)發(fā)的能力(簡(jiǎn)單险毁、容易上手)制圈;
- 避免了去寫(xiě)MapReduce,減少開(kāi)發(fā)人員的學(xué)習(xí)成本畔况;
- 統(tǒng)一的元數(shù)據(jù)管理鲸鹦,可與impala/spark等共享元數(shù)據(jù);
- 易擴(kuò)展(HDFS+MapReduce:可以擴(kuò)展集群規(guī)模跷跪;支持自定義函數(shù))馋嗜;
Hive使用場(chǎng)景
- 數(shù)據(jù)的離線(xiàn)處理;比如:日志分析吵瞻,海量結(jié)構(gòu)化數(shù)據(jù)離線(xiàn)分析…
- Hive的執(zhí)行延遲比較高葛菇,因此hive常用于數(shù)據(jù)分析的,對(duì)實(shí)時(shí)性要求不高的場(chǎng)合橡羞;
- Hive優(yōu)勢(shì)在于處理大數(shù)據(jù)眯停,對(duì)于處理小數(shù)據(jù)沒(méi)有優(yōu)勢(shì),因?yàn)镠ive的執(zhí)行延遲比較高卿泽。
Hive的執(zhí)行流程
- HiveQL通過(guò)CLI/web UI或者thrift 庵朝、 odbc 或 jdbc接口的外部接口提交,經(jīng)過(guò)complier編譯器又厉,運(yùn)用Metastore中的元數(shù)據(jù)進(jìn)行類(lèi)型檢測(cè)和語(yǔ)法分析九府,生成一個(gè)邏輯方案(logical plan),然后通過(guò)簡(jiǎn)單的優(yōu)化處理,產(chǎn)生一個(gè)以有向無(wú)環(huán)圖DAG數(shù)據(jù)結(jié)構(gòu)形式展現(xiàn)的map-reduce任務(wù)覆致。
SQL轉(zhuǎn)化成MapReduce過(guò)程
- Hive是如何將SQL轉(zhuǎn)化為MapReduce任務(wù)的侄旬,整個(gè)編譯過(guò)程分為六個(gè)階段:
- 1-Antlr定義SQL的語(yǔ)法規(guī)則,完成SQL詞法煌妈,語(yǔ)法解析儡羔,將SQL轉(zhuǎn)化為抽象語(yǔ)法樹(shù)AST Tree;
- 2-遍歷AST Tree璧诵,抽象出查詢(xún)的基本組成單元QueryBlock汰蜘;
- 3-遍歷QueryBlock,翻譯為執(zhí)行操作樹(shù)OperatorTree之宿;
- 4-邏輯層優(yōu)化器進(jìn)行OperatorTree變換族操,合并不必要的ReduceSinkOperator,減少shuffle數(shù)據(jù)量;
- 5-遍歷OperatorTree色难,翻譯為MapReduce任務(wù)泼舱;
- 6-物理層優(yōu)化器進(jìn)行MapReduce任務(wù)的變換,生成最終的執(zhí)行計(jì)劃枷莉。
推薦學(xué)習(xí)博客:hive sql語(yǔ)句轉(zhuǎn)換成mapreduce