Hive 基本架構(gòu)

hive是一個(gè)著名的離線處理的數(shù)據(jù)倉(cāng)庫(kù)询筏,可以通過(guò)類SQL語(yǔ)言輕松的訪問(wèn)大量的數(shù)據(jù)集拖叙,也可以訪問(wèn)HDFS中的文件厌衔,但是其底層的實(shí)現(xiàn)是MapReduce,所以具有較高的可擴(kuò)展性钱骂。但是hive不是RDBMS數(shù)據(jù)庫(kù)。

hive具有明顯的自己特色斤富,它不支持?jǐn)?shù)據(jù)更新膏潮,不支持事務(wù)和索引,但是具有了更小的分區(qū)---桶满力。同時(shí)其具有了并發(fā)處理大數(shù)據(jù)文件的能力焕参。

我們可以認(rèn)為Hive是MapReduce的翻譯器轻纪。

Hive的缺點(diǎn)

HQL并非完全是SQL語(yǔ)法,很多復(fù)雜的語(yǔ)法無(wú)法實(shí)現(xiàn)叠纷,比如join操作刻帚,只支持等值連接,迭代的算法無(wú)法實(shí)現(xiàn)涩嚣。

同時(shí)hive生成的mapReduce效率不會(huì)太高崇众,基本上一個(gè)操作生成一個(gè)Map Reduce,一條語(yǔ)句可能生成很多Map Reduce ,一般可以使用Tez進(jìn)行優(yōu)化航厚,但是效率要求高的地方一般需要自己寫(xiě)MapReduce來(lái)實(shí)現(xiàn)顷歌。

Hive架構(gòu)

Hive和mySQL一樣是C/S架構(gòu)

client端包括 JDBC/ODBC Client和Thrift Client兩類

Server端包括 CLI Thrift Server Metastore WUI Driver

Driver

Driver 每一個(gè)Hive服務(wù)都需要調(diào)用Driver來(lái)完成HQL語(yǔ)句的翻譯和執(zhí)行。通俗地說(shuō)幔睬,Driver就是HQL編譯器眯漩,它解析和優(yōu)化HQL語(yǔ)句,將其轉(zhuǎn)換成一個(gè)Hive Job(可以是MapReduce麻顶,也可以是Spark等其他任務(wù))并提交給Hadoop集群赦抖。

Metastore

Metastore是Hive元數(shù)據(jù)的存儲(chǔ)地。在功能上Metastore分為兩個(gè)部分:服務(wù)和存儲(chǔ).hive服務(wù)和存儲(chǔ)部署的三種模式:

1.內(nèi)嵌模式
內(nèi)嵌模式是Hive Metastore的最簡(jiǎn)單的部署方式辅肾,使用Hive內(nèi)嵌的Derby數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)元數(shù)據(jù)队萤。但是Derby只能接受一個(gè)Hive會(huì)話的訪問(wèn),試圖啟動(dòng)第二個(gè)Hive會(huì)話就會(huì)導(dǎo)致Metastore連接失敗矫钓。

2.本地模式
本地模式是Metastore的默認(rèn)模式(懶人專用模式)要尔。該模式下,單Hive會(huì)話(一個(gè)Hive 服務(wù)JVM)以組件方式調(diào)用Metastore和Driver新娜。我們可以采用MySQL作為Metastore的數(shù)據(jù)庫(kù)盈电。下面列出部署細(xì)節(jié):

在hive-site.xml中設(shè)置MySQL的Connection URL、用戶名和密碼以及ConnectionDriverName杯活;
將MySQL的JDBC驅(qū)動(dòng)Jar文件放到Hive的lib目錄下。

3.遠(yuǎn)程模式
遠(yuǎn)程模式將Metastore分離出來(lái)熬词,成為一個(gè)獨(dú)立的Hive服務(wù)(Metastore服務(wù)還可以部署多個(gè))旁钧。這樣的模式可以將數(shù)據(jù)庫(kù)層完全置于防火墻后,客戶就不再需要用戶名和密碼登錄數(shù)據(jù)庫(kù)互拾,避免了認(rèn)證信息的泄漏歪今。

  • hive.metastore.local false為遠(yuǎn)程模式
  • hive.metastore.uris 遠(yuǎn)端模式下Metastore的URI列表
hive查詢過(guò)程

就如上文所示一樣Hive類似與hiveQL轉(zhuǎn)化的Mapreduce的語(yǔ)言解釋器。

用戶提交hiveQL會(huì)被提交給驅(qū)動(dòng)器driver,驅(qū)動(dòng)器將語(yǔ)句交給解釋器進(jìn)行分析颜矿,解釋器compiler根據(jù)語(yǔ)句去元數(shù)據(jù)集metastore請(qǐng)求需要的數(shù)據(jù),元數(shù)據(jù)集給解釋器返回?cái)?shù)據(jù)寄猩,解釋器將分析好的任務(wù)再次返回啟動(dòng)器,驅(qū)動(dòng)器給執(zhí)行器發(fā)布執(zhí)行命令骑疆。最后執(zhí)行器根據(jù)得到的執(zhí)行機(jī)會(huì)去和hadoop集群交互田篇。

MapReduce實(shí)現(xiàn)HiveQL

1.mapreduce實(shí)現(xiàn)join


join.png

實(shí)現(xiàn)的過(guò)程是在Map階段將來(lái)自哪個(gè)表的數(shù)據(jù)打上標(biāo)簽替废,在reduce階段,按標(biāo)簽區(qū)分不同的列泊柬,按key來(lái)進(jìn)行數(shù)據(jù)的合并椎镣。

2.MapReduce實(shí)現(xiàn)groupy


groupby.png

在map階段將字段組合為key值,將value值設(shè)為統(tǒng)計(jì)的次數(shù)兽赁,在reduce階段直接進(jìn)行合并状答。

3.Mapreduce實(shí)現(xiàn)distinct


1distinct.png

當(dāng)只有一個(gè)distinct字段時(shí),如果不考慮Map階段的Hash GroupBy刀崖,只需要將GroupBy字段和Distinct字段組合為map輸出key惊科,利用mapreduce的排序,同時(shí)將GroupBy字段作為reduce的key亮钦,在reduce階段保存LastKey即可完成去重.
類似與groupby但是不執(zhí)行合并馆截,只是取最后一個(gè)數(shù)即可。

了解了MapReduce實(shí)現(xiàn)SQL基本操作之后或悲,我們來(lái)看看Hive是如何將SQL轉(zhuǎn)化為MapReduce任務(wù)的孙咪,整個(gè)編譯過(guò)程分為六個(gè)階段:
Antlr定義SQL的語(yǔ)法規(guī)則,完成SQL詞法巡语,語(yǔ)法解析翎蹈,將SQL轉(zhuǎn)化為抽象語(yǔ)法樹(shù)AST Tree
遍歷AST Tree,抽象出查詢的基本組成單元QueryBlock
遍歷QueryBlock男公,翻譯為執(zhí)行操作樹(shù)OperatorTree
邏輯層優(yōu)化器進(jìn)行OperatorTree變換荤堪,合并不必要的ReduceSinkOperator,減少shuffle數(shù)據(jù)量
遍歷OperatorTree枢赔,翻譯為MapReduce任務(wù)
物理層優(yōu)化器進(jìn)行MapReduce任務(wù)的變換澄阳,生成最終的執(zhí)行計(jì)劃

Hive數(shù)據(jù)模型

clipboard.png

分區(qū)表:
分區(qū):把數(shù)據(jù)放在不同的磁盤文件中,就認(rèn)為是不同的分區(qū),數(shù)據(jù)庫(kù)對(duì)不同的分區(qū)會(huì)進(jìn)行單獨(dú)的管理,優(yōu)化,最終的目的是加快我們數(shù)據(jù)查詢的速度,在hive中,把不同的分區(qū)分在表中不同的子文件夾中.

桶表:
桶表和分區(qū)表的區(qū)別在于:不是按照業(yè)務(wù)字段來(lái)進(jìn)行分區(qū),對(duì)里面的記錄做一個(gè)hash,記錄做完hash之后就沒(méi)有規(guī)律了,可以簡(jiǎn)單的認(rèn)為數(shù)據(jù)做完hash之后都不相同,然后我們讓數(shù)據(jù)進(jìn)行模10,數(shù)據(jù)就被分成了十份,模100就被分成100份,因?yàn)閔ash值幾乎各不相同,所以模后的結(jié)果,分成10份或者100份,每一份的數(shù)據(jù)量幾乎是一樣多的,當(dāng)你hash之后然后模一個(gè)數(shù)字,分的那些數(shù)據(jù)量,每一份應(yīng)該是差不多的,如果這樣的話,我們把這樣的數(shù)據(jù)存起來(lái),模5,10,100 模的這個(gè)數(shù)字叫做桶,模幾就分成幾個(gè)桶,桶實(shí)際上就是模的數(shù)字,我們的記錄就被劃分到這個(gè)桶里面了,那么hive在進(jìn)行查詢的時(shí)候就會(huì)按照5個(gè)桶或者10個(gè)桶來(lái)進(jìn)行處理,這樣的話,好處是各個(gè)map運(yùn)行的時(shí)間差不多.

數(shù)據(jù)類型

Hive發(fā)展

目前Hive的底層已經(jīng)變?yōu)榱薚ez,Tez相比與MapReduce有很多的優(yōu)勢(shì),提供了多種算子踏拜,可以將多個(gè)作業(yè)合并為一個(gè)作業(yè)碎赢,減少了IO,充分利用了內(nèi)存的資源。

360截圖18630226325773.png
Impala

底層計(jì)算引擎不再采用MR速梗,而是使用與商用并行關(guān)系數(shù)據(jù)庫(kù) 類似的分布式查詢引擎肮塞;

Impala可直接處理存儲(chǔ)在HDFS上的數(shù)據(jù),并將結(jié)果集再次寫(xiě) 入HDFS姻锁;

具有良好的擴(kuò)展性和容錯(cuò)性枕赵;

適合快速交互式查詢

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市位隶,隨后出現(xiàn)的幾起案子拷窜,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件篮昧,死亡現(xiàn)場(chǎng)離奇詭異赋荆,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)恋谭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門糠睡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人疚颊,你說(shuō)我怎么就攤上這事狈孔。” “怎么了材义?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵均抽,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我其掂,道長(zhǎng)油挥,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任款熬,我火速辦了婚禮深寥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘贤牛。我一直安慰自己惋鹅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布殉簸。 她就那樣靜靜地躺著闰集,像睡著了一般。 火紅的嫁衣襯著肌膚如雪般卑。 梳的紋絲不亂的頭發(fā)上武鲁,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音蝠检,去河邊找鬼沐鼠。 笑死,一個(gè)胖子當(dāng)著我的面吹牛叹谁,可吹牛的內(nèi)容都是我干的迟杂。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼本慕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了侧漓?” 一聲冷哼從身側(cè)響起锅尘,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后藤违,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體浪腐,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年顿乒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了议街。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡璧榄,死狀恐怖特漩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情骨杂,我是刑警寧澤涂身,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站搓蚪,受9級(jí)特大地震影響蛤售,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜妒潭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一悴能、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧雳灾,春花似錦漠酿、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至团驱,卻和暖如春摸吠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嚎花。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工寸痢, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人紊选。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓啼止,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親兵罢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子献烦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容