版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Hive架構(gòu)思想和設(shè)計(jì)原理1前言
大家好~我是理哥
。今天為大家推薦的是夢(mèng)想家的
Hive架構(gòu)思想和設(shè)計(jì)原理,希望對(duì)大家有啟發(fā)。2Hive
MapReduce雖然只有map和reduce這兩個(gè)函數(shù),但幾乎可以滿足任何大數(shù)據(jù)分析和機(jī)器學(xué)習(xí)的場(chǎng)景。不過,復(fù)雜的計(jì)算可能需要使用多個(gè)job才能完成,這些job之間還需要根據(jù)其先后依賴關(guān)系進(jìn)行作業(yè)的編排,開發(fā)比較復(fù)雜。
在Hadoop出現(xiàn)之前,大部分的數(shù)據(jù)分析人員基本都用SQL語句分析數(shù)據(jù)庫中的數(shù)據(jù),如果讓這些數(shù)據(jù)分析人員重新學(xué)習(xí)一下Hadoop支持的開發(fā)語言,將會(huì)耗費(fèi)巨大的人力成本和學(xué)習(xí)成本。
所以,就有聰明的小伙伴想到,如果能根據(jù)SQL自動(dòng)生成MapReduce,就可以極大降低大數(shù)據(jù)技術(shù)在數(shù)據(jù)分析領(lǐng)域的應(yīng)用門檻。
基于這樣的一個(gè)需求場(chǎng)景,Hive橫空出世。 Hive的架構(gòu)
首先讓我們來看下Hive的架構(gòu)。Hive可以通過CLI,JDBC和ODBC等客戶端進(jìn)行訪問。除此之外,Hive還支持WUI訪問Hive內(nèi)部執(zhí)行流程:解析器(解析SQL語句)、編譯器(把SQL語句編譯成MapReduce程序)、優(yōu)化器(優(yōu)化MapReduce程序)、執(zhí)行器(將MapReduce程序運(yùn)行的結(jié)果提交到HDFS)Hive的元數(shù)據(jù)保存在數(shù)據(jù)庫中,如保存在MySQL,SQLServer,PostgreSQL,Oracle及Derby等數(shù)據(jù)庫中。Hive中的元數(shù)據(jù)信息包含表名,列名,分區(qū)及其屬性,表的屬性(包括是否為外部表),表數(shù)據(jù)所在目錄等。Hive將大部分HiveSQL語句轉(zhuǎn)化為MapReduce作業(yè)提交到Hadoop上執(zhí)行;少數(shù)HiveSQL語句不會(huì)轉(zhuǎn)化為MapReduce作業(yè),直接從DataNode上獲取數(shù)據(jù)后按照順序輸出。
知曉了架構(gòu),我們接下來通過一條常見的SQL語句,來看看Hive是如何將其轉(zhuǎn)換成MapReduce來計(jì)算的。 MapReduce實(shí)現(xiàn)SQL的原理SELECT
pageid,
age,
count(1)
FROM
pv_users
GROUP
BY
pageid,
age;
就像所展示的一樣,這是一條很常見的SQL統(tǒng)計(jì)分析語句,用于統(tǒng)計(jì)不同年齡的用戶訪問不同網(wǎng)頁的興趣偏好,具體數(shù)據(jù)輸入和執(zhí)行的結(jié)果示例如圖所示:
看這個(gè)示例我們就會(huì)發(fā)現(xiàn),這個(gè)計(jì)算場(chǎng)景和WordCount很像。事實(shí)上也確實(shí)如此,我們可以用MapReduce完成這條SQL的處理。
這樣一條很有實(shí)用價(jià)值的SQL就被很簡(jiǎn)單的MapReduce計(jì)算過程處理好了。
map函數(shù)輸出的key是表的行記錄,value是1,reduce函數(shù)對(duì)相同的行進(jìn)行記錄,也就是針對(duì)具有相同key的value集合進(jìn)行求和計(jì)算,最終得到SQL的輸出結(jié)果。
Hive要做的就是將SQL翻譯成MapReduce程序代碼。實(shí)際上,Hive內(nèi)置了很多Operator,每個(gè)Operator完成一個(gè)特定的計(jì)算過程,Hive將這些Operator構(gòu)造成一個(gè)有向無環(huán)圖DAG,然后根據(jù)這些Operator之間是否存在shuffle將其封裝到map或者reduce函數(shù)中,之后就可以提交給MapReduce執(zhí)行了。
Operator組成的DAG如下圖所示,這是一個(gè)包含where查詢條件的SQL,where查詢條件對(duì)應(yīng)一個(gè)FilterOperator。
值得注意的是,有些HiveQL語句不會(huì)被Hive轉(zhuǎn)化成MapReduce作業(yè),Hive只會(huì)從DataNode將數(shù)據(jù)獲取到了之后,按照順序依次輸出。select
*
from
user; Hive如何實(shí)現(xiàn)join操作
除了上面這些簡(jiǎn)單的聚合(groupby)、過濾(where)操作,Hive還能執(zhí)行連接(joinon)操作。
比如現(xiàn)在來了一個(gè)需求。
有2張表,一張是page_view頁面瀏覽記錄表,一張是user用戶表
如果我想收集到每個(gè)頁面瀏覽用戶的age信息,該如何獲取。
很明顯,這兩張表都有一個(gè)相同的字段userid,根據(jù)這個(gè)字段可以將兩張表連接起來,生成我們最終想要的結(jié)果表pv_users,SQL命令是SELECT
pv.pageid,
u.age
FROM
page_view
pv
JOIN
user
u
ON
(pv.userid
=
u.userid);
同樣,這個(gè)SQL命令也可以轉(zhuǎn)化為MapReduce計(jì)算,連接的過程如下圖所示。
從圖上看,join的MapReduce計(jì)算過程和前面的groupby稍有不同,因?yàn)閖oin涉及兩張表,來自兩個(gè)文件(夾),所以需要在map輸出的時(shí)候進(jìn)行標(biāo)記,比如來自第一張表的輸出Value就記錄為<1,X>,這里的1表示數(shù)據(jù)來自第一張表。這樣經(jīng)過shuffle以后,相同的Key被輸入到同一個(gè)reduce函數(shù),就可以根據(jù)表的標(biāo)記對(duì)Value數(shù)據(jù)求笛卡爾積,用第一張表的每條記錄和第二張表的每條記錄連接,輸出就是join的結(jié)果。
所以我們?nèi)绻蜷_Hive的源代碼,看join相關(guān)的代碼,會(huì)看到一個(gè)兩層for循環(huán),對(duì)來自兩張表的記錄進(jìn)行連接操作。
Hive命令說明
在Hive提供的所有連接方式中,命令行界面是最常見的一種。用戶可以使用Hive的命令行對(duì)Hive中的數(shù)據(jù)庫,數(shù)據(jù)表和數(shù)據(jù)進(jìn)行各種的操作。
關(guān)于Hive命令使用的小技巧,可以看之前寫的文章??《關(guān)于Hive命令的7個(gè)小技巧,你都清楚嗎?》
關(guān)于Hive查詢的18種姿勢(shì),可以看之前寫的文章??《Hive查詢的18種方式,你都學(xué)會(huì)了嗎?》 Hive函數(shù)使用
Hive內(nèi)部支持大量的函數(shù),可以通過SHOWFUNCTIONS查看Hive的內(nèi)置函數(shù)。靈活地運(yùn)用Hive提供的函數(shù)能夠極大地節(jié)省數(shù)據(jù)分析成本。Hive函數(shù)主要包含數(shù)學(xué)函數(shù),集合函數(shù),類型轉(zhuǎn)換函數(shù),日期函數(shù),條件函數(shù),字符串函數(shù),聚合函數(shù)和表生成函數(shù)等。
因?yàn)閮?nèi)容過多,篇幅有限,我就展示部分內(nèi)容。微信關(guān)注大數(shù)據(jù)夢(mèng)想家公眾號(hào),后臺(tái)回復(fù)“hive”即可解鎖“hive函數(shù)大全” Hive調(diào)優(yōu)
調(diào)優(yōu)向來都非常重要,無論是面試復(fù)習(xí),還是實(shí)際工作,都少不了和它打交道。
例如,從建表設(shè)計(jì)層面,我們可以考慮到利用分區(qū)表/分桶表優(yōu)化,選擇選擇合適的壓縮格式。
從HQL語法和運(yùn)行參數(shù)層面,我們可以采用查看Hive執(zhí)行計(jì)劃,列剪裁,謂詞下推,分區(qū)剪裁,合并小文件等方式...
從Hive架構(gòu)層面,我們可以采用啟用本地抓取,本地執(zhí)行優(yōu)化,JVM重用,并行執(zhí)行等方式...
因?yàn)檫@部分內(nèi)容如果展開來寫確實(shí)非常多,不利于閱讀,而且本篇文章的定位并不是保姆級(jí)Hive教程,所以我就不費(fèi)更多精力去敘述這些內(nèi)容。正好我之前收集了一本《Hive性能調(diào)優(yōu)實(shí)戰(zhàn)》,
里面的內(nèi)容非常干貨,從環(huán)境搭建,到深入MapReduce引擎分析...最后一章,還介紹了
Hive知識(shí)體系
最后,附贈(zèng)一張馬中華老師親繪的Hive的SQL編譯源碼詳解,想從源碼角度更深理解Hive執(zhí)行流程可以從鏈接獲取高清大圖:/zhongqi2513/article/details/1071536983巨人的肩膀「1」《從零開始學(xué)大數(shù)據(jù)》
「2」《大數(shù)據(jù)平臺(tái)架構(gòu)與實(shí)現(xiàn)》
「3」《架構(gòu)師的自我修煉》
4尾聲
在實(shí)踐中,工程師其實(shí)并不需要經(jīng)常編寫MapReduce程序,因?yàn)榫W(wǎng)站最主要的大數(shù)據(jù)處理就是SQL分析,也因此Hive在大數(shù)據(jù)應(yīng)用中的作用非常重要。
后面隨著Hive的普及,我們對(duì)于在Hadoop上執(zhí)行SQL的需求越加強(qiáng)烈,對(duì)大數(shù)據(jù)SQL的應(yīng)用場(chǎng)景也多樣化起來,于是又開發(fā)了各種大數(shù)據(jù)SQL引擎。
例如Cloudera也開發(fā)了Impala,這是一種運(yùn)行在HDFS上的MPP架構(gòu)的SQL引擎。和MapReduce啟動(dòng)Map和Reduce兩種執(zhí)行進(jìn)程,將計(jì)算過程分成兩個(gè)階段進(jìn)行計(jì)算不同,Impala在所有DataNode服務(wù)器上部署相同的Impalad進(jìn)程,多個(gè)Impalad進(jìn)程相互協(xié)作,共同完成SQL計(jì)算。在一些統(tǒng)計(jì)場(chǎng)景中,Impala可以做到毫秒級(jí)的計(jì)算速度。
還有后面我會(huì)為大家介紹的
SparkSQL,此外,大家還希望在NoSQL的數(shù)據(jù)庫上執(zhí)行SQL,畢竟SQL發(fā)展了幾十年,積累了龐大的用戶群體
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度醫(yī)院醫(yī)療廢物處理設(shè)施建設(shè)合同4篇
- 2025年度個(gè)人創(chuàng)業(yè)貸款合同示范文本8篇
- 二零二五年度美容院美容護(hù)膚品生產(chǎn)股份合作合同4篇
- 二零二五版木質(zhì)家具定制設(shè)計(jì)與生產(chǎn)加工合同3篇
- 二零二五年度電子商務(wù)平臺(tái)標(biāo)志設(shè)計(jì)及用戶體驗(yàn)合同3篇
- 二零二五年度托盤租賃與供應(yīng)鏈金融結(jié)合合同范本3篇
- 二零二五年度昌平區(qū)食堂員工激勵(lì)與績(jī)效考核合同3篇
- 2025年度汽車租賃與品牌合作推廣合同范本3篇
- 二零二五年度城市綠化工程承包合同14篇
- 2025年度線上線下聯(lián)動(dòng)大型促銷活動(dòng)合作合同3篇
- 項(xiàng)目前期選址分析報(bào)告
- 急性肺栓塞搶救流程
- 《統(tǒng)計(jì)學(xué)-基于Python》 課件全套 第1-11章 數(shù)據(jù)與Python語言-時(shí)間序列分析和預(yù)測(cè)
- 《形象價(jià)值百萬》課件
- 紅色文化教育國內(nèi)外研究現(xiàn)狀范文十
- 中醫(yī)基礎(chǔ)理論-肝
- 小學(xué)外來人員出入校門登記表
- 《土地利用規(guī)劃學(xué)》完整課件
- GB/T 25283-2023礦產(chǎn)資源綜合勘查評(píng)價(jià)規(guī)范
- 《汽車衡全自動(dòng)智能稱重系統(tǒng)》設(shè)計(jì)方案
- 義務(wù)教育歷史課程標(biāo)準(zhǔn)(2022年版)
評(píng)論
0/150
提交評(píng)論