Hive架構(gòu)
hive架構(gòu)如圖所示,client跟driver交互,通過parser、planner、optimizer,最后轉(zhuǎn)為mapreduce運(yùn)行,具體步驟如下
創(chuàng)新互聯(lián)公司專注于越秀企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè),購(gòu)物商城網(wǎng)站建設(shè)。越秀網(wǎng)站建設(shè)公司,為越秀等地區(qū)提供建站服務(wù)。全流程按需制作網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
- driver輸入一條sql,會(huì)由parser轉(zhuǎn)為抽象語(yǔ)法樹AST,這個(gè)是沒有任務(wù)元數(shù)據(jù)信息的語(yǔ)法樹;
- 語(yǔ)法分析器再把AST轉(zhuǎn)為一個(gè)一個(gè)的QueryBlock,一個(gè)QueryBlock包含輸入、輸出、計(jì)算邏輯,也就是說一個(gè)子程序就是QueryBlock
- planner遍歷所有的QueryBlock,轉(zhuǎn)為一個(gè)個(gè)的Operator(算子,比如tablescanOperator),最后形成OperatorTree;
- 優(yōu)化器對(duì)OperatorTree進(jìn)行優(yōu)化,包含謂詞下推、剪枝等;
- 然后遍歷OperatorTree,分割成多個(gè)mapreduce作業(yè),形成物理計(jì)劃
- 之后進(jìn)行物理優(yōu)化,比如是否進(jìn)行map join等
Hive 數(shù)據(jù)傾斜優(yōu)化
- 對(duì)于group by可以有兩個(gè)優(yōu)化點(diǎn)
map聚合:set hive.map.aggr=true,會(huì)在map端對(duì)相同key先聚合一下;
分發(fā)為兩道作業(yè):set hive.groupby.skewindata=true,會(huì)對(duì)原來的一道作業(yè)分為兩道作業(yè),第一道隨機(jī)分配key,第二道再按key分配
注意:對(duì)于部分聚合函數(shù)有用,比如sum和count,但是完全聚合函數(shù)無用,比如avg - 對(duì)于join也有兩個(gè)優(yōu)化點(diǎn)
map join:新版hive中默認(rèn)開啟set hive.auto.convert.join=true ,join的左表如果足夠小,會(huì)直接把左表內(nèi)容加載到內(nèi)存中
兩道作業(yè):set hive.optimize.skewjoin = true;set hive.skewjoin.key = skew_key_threshold (default = 100000)這個(gè)兩道作業(yè)跟groupby不一樣,這個(gè)是說把超過10萬行的數(shù)據(jù)單獨(dú)啟一道m(xù)ap join,最后再把結(jié)果聚合
hive常見問題
- hive不支持非等值join
錯(cuò)誤:select from a inner join b on a.id<>b.id
替代方法:select from a inner join b on a.id=b.id and a.id is null; - hive不支持非join連接
錯(cuò)誤:select from dual a,dual b where a.key = b.key;
正確:select from dual a join dual b on a.key = b.key; - hive不支持or
錯(cuò)誤:select from a inner join b on a.id=b.id or a.name=b.name
替代方法:select from a inner join b on a.id=b.id union all select * from a inner join b on a.name=b.name - hive內(nèi)部表和外部表的區(qū)別
創(chuàng)建表時(shí):創(chuàng)建內(nèi)部表時(shí),會(huì)將數(shù)據(jù)移動(dòng)到數(shù)據(jù)倉(cāng)庫(kù)指向的路徑;若創(chuàng)建外部表,僅記錄數(shù)據(jù)所在的路徑, 不對(duì)數(shù)據(jù)的位置做任何改變。
刪除表時(shí):在刪除表的時(shí)候,內(nèi)部表的元數(shù)據(jù)和數(shù)據(jù)會(huì)被一起刪除, 而外部表只刪除元數(shù)據(jù),不刪除數(shù)據(jù)。這樣外部表相對(duì)來說更加安全些,數(shù)據(jù)組織也更加靈活,方便共享源數(shù)據(jù) - sortby、orderby、distributeby
order by會(huì)引發(fā)全局排序;會(huì)導(dǎo)致所有的數(shù)據(jù)集中在一臺(tái)reducer節(jié)點(diǎn)上,然后進(jìn)行排序,這樣很可能會(huì)超過單個(gè)節(jié)點(diǎn)的磁盤和內(nèi)存存儲(chǔ)能力導(dǎo)致任務(wù)失敗。
distribute by + sort by就是該替代方案,被distribute by設(shè)定的字段為KEY,數(shù)據(jù)會(huì)被HASH分發(fā)到不同的reducer機(jī)器上,然后sort by會(huì)對(duì)同一個(gè)reducer機(jī)器上的每組數(shù)據(jù)進(jìn)行局部排序。
分享文章:Hive架構(gòu)、傾斜優(yōu)化、sql及常見問題
本文網(wǎng)址:http://jinyejixie.com/article12/pppegc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、云服務(wù)器、網(wǎng)站設(shè)計(jì)、營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站營(yíng)銷、品牌網(wǎng)站設(shè)計(jì)
廣告
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源:
創(chuàng)新互聯(lián)