{eval=Array;=+count(Array);}
您好,我是數(shù)據(jù)僧(頭條,公眾號(hào),簡書),,一名數(shù)據(jù)相關(guān)從業(yè)者。下面講講我對(duì)您這個(gè)問題的理解。
Hive是為了解決什么問題,Hive產(chǎn)生的背景,我們以這個(gè)為引子,展開回答。
1,MapReduce編程的不變性,如果要處理一些數(shù)據(jù)處理的任務(wù),會(huì)有一定的門檻,并且操作起來不方便。
2,Hdfs上的文件缺少Schema。例如:缺少 字段名,數(shù)據(jù)類型等,不方面數(shù)據(jù)進(jìn)行有效管理。
3,用于解決海量結(jié)構(gòu)化數(shù)據(jù)的統(tǒng)計(jì)問題
4,如果使用MapReduce等計(jì)算框架,學(xué)習(xí)成本比較高
5,在項(xiàng)目周期比較短的情況下,如果使用mapReduce或者其它的開發(fā)框架進(jìn)行開發(fā),無法滿足項(xiàng)目對(duì)時(shí)間的要求。
我們從具體應(yīng)用場景下看看Hive處于hadoop生態(tài)系統(tǒng)的什么位置:
如圖:Hive以Hdfs為基本的文件存儲(chǔ),以MapReduce為執(zhí)行引擎。所以Hive天然就具備了Hdfs,MapReduce的特性。
我們和傳統(tǒng)數(shù)據(jù)庫進(jìn)行對(duì)比看看Hive有哪些優(yōu)勢(shì)和不足,當(dāng)然這種不足是特定場景下的,也是Hive不擅長的領(lǐng)域。
hive的編寫語法和傳統(tǒng)的sql類似,核心的是hive有一套不同與sql的語法規(guī)則,最終被解釋為mapReduce任務(wù)。hive只適合在海量數(shù)據(jù)下進(jìn)行批量數(shù)據(jù)統(tǒng)計(jì)分析。
我們?cè)趤砜纯磆ive和mapReduce之間的關(guān)系,如圖:
在來看看hive的內(nèi)部結(jié)構(gòu)示意圖
Driver組件:
SQL Parser:編譯器,將HQL轉(zhuǎn)換成抽象語法樹。
Query Optimizer:查詢優(yōu)化器
Physical Plan,SerDes,Udfs:執(zhí)行器
解釋器、編譯器、優(yōu)化器完成 HQL 查詢語句從詞法分析、語法分析、編譯、優(yōu)化以及查詢計(jì)劃的生成。生成的查詢計(jì)劃存儲(chǔ)在HDFS 中,并在隨后有 MapReduce 調(diào)用執(zhí)行。
Metastore組件:Hive將元數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫中。Hive 中的元數(shù)據(jù)包括表的名字,表的列和分區(qū)及其屬性,表的屬性(是否為外部表等),表的數(shù)據(jù)所在目錄等
Hive處理命令的流程示意圖:
SQL Parser將SQL語句轉(zhuǎn)換成抽象語法樹--->生成邏輯執(zhí)行計(jì)劃---->查詢優(yōu)化----> 物理執(zhí)行計(jì)劃(SerDes序列化與反序列化,UDFs,執(zhí)行引擎)
上面主要是從整體上介紹hive,已經(jīng)hive相關(guān)的組件,最后總結(jié)下hive有哪些特點(diǎn):
1,hive延遲高,適合高吞吐量,批量,海量數(shù)據(jù)處理。
2,語法和SQL相似,學(xué)習(xí)成本低,避免去寫復(fù)雜的MapReduce,縮短開發(fā)周期。
3,Hive支持自由的擴(kuò)展集群的規(guī)模,一般不需要重啟服務(wù)。
4,Hive支持自定義函數(shù),用戶可以根據(jù)自己的需求去定義函數(shù)。
5,良好的容錯(cuò)性,節(jié)點(diǎn)出現(xiàn)問題,SQL仍然可以成功執(zhí)行。
。。
整體上來說是繼承了HDFS和MapReduce的特點(diǎn)。
數(shù)據(jù)僧,祝愿每個(gè)在數(shù)據(jù)道路上的人越走越好。你們的關(guān)注 是我巨大的動(dòng)力。歡迎大家在評(píng)論區(qū)留言,大家一起討論。
0
回答0
回答0
回答2
回答0
回答0
回答0
回答0
回答3
回答0
回答