本篇內(nèi)容介紹了“Hive中Join的原理和機(jī)制是什么”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
永靖網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),永靖網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為永靖超過千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)營銷網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的永靖做網(wǎng)站的公司定做!
籠統(tǒng)的說,Hive中的Join可分為Common Join(Reduce階段完成join)和Map Join(Map階段完成join)。本文簡單介紹一下兩種join的原理和機(jī)制。
如果不指定MapJoin或者不符合MapJoin的條件,那么Hive解析器會將Join操作轉(zhuǎn)換成Common Join,即:在Reduce階段完成join.
整個過程包含Map、Shuffle、Reduce階段。
Map階段
讀取源表的數(shù)據(jù),Map輸出時候以Join on條件中的列為key,如果Join有多個關(guān)聯(lián)鍵,則以這些關(guān)聯(lián)鍵的組合作為key;
Map輸出的value為join之后所關(guān)心的(select或者where中需要用到的)列;同時在value中還會包含表的Tag信息,用于標(biāo)明此value對應(yīng)哪個表;
按照key進(jìn)行排序
Shuffle階段
根據(jù)key的值進(jìn)行hash,并將key/value按照hash值推送至不同的reduce中,這樣確保兩個表中相同的key位于同一個reduce中
Reduce階段
根據(jù)key的值完成join操作,期間通過Tag來識別不同表中的數(shù)據(jù)。
以下面的HQL為例,圖解其過程:
SELECT
a.id,a.dept,b.age
FROM a join b
ON (a.id = b.id);
看了這個圖,應(yīng)該知道如何使用MapReduce進(jìn)行join操作了吧。
MapJoin通常用于一個很小的表和一個大表進(jìn)行join的場景,具體小表有多小,由參數(shù)hive.mapjoin.smalltable.filesize來決定,該參數(shù)表示小表的總大小,默認(rèn)值為25000000字節(jié),即25M。
Hive0.7之前,需要使用hint提示 /*+ mapjoin(table) */才會執(zhí)行MapJoin,否則執(zhí)行Common Join,但在0.7版本之后,默認(rèn)自動會轉(zhuǎn)換Map Join,由參數(shù)hive.auto.convert.join來控制,默認(rèn)為true.
仍然以9.1中的HQL來說吧,假設(shè)a表為一張大表,b為小表,并且hive.auto.convert.join=true,那么Hive在執(zhí)行時候會自動轉(zhuǎn)化為MapJoin。
如圖中的流程,首先是Task A,它是一個Local Task(在客戶端本地執(zhí)行的Task),負(fù)責(zé)掃描小表b的數(shù)據(jù),將其轉(zhuǎn)換成一個HashTable的數(shù)據(jù)結(jié)構(gòu),并寫入本地的文件中,之后將該文件加載到DistributeCache中,該HashTable的數(shù)據(jù)結(jié)構(gòu)可以抽象為:
key | value |
1 | 26 |
2 | 34 |
圖中紅框圈出了執(zhí)行Local Task的信息。
接下來是Task B,該任務(wù)是一個沒有Reduce的MR,啟動MapTasks掃描大表a,在Map階段,根據(jù)a的每一條記錄去和DistributeCache中b表對應(yīng)的HashTable關(guān)聯(lián),并直接輸出結(jié)果。
由于MapJoin沒有Reduce,所以由Map直接輸出結(jié)果文件,有多少個Map Task,就有多少個結(jié)果文件。
“Hive中Join的原理和機(jī)制是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
網(wǎng)頁標(biāo)題:Hive中Join的原理和機(jī)制是什么
文章起源:http://www.rwnh.cn/article10/jgjigo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、品牌網(wǎng)站制作、做網(wǎng)站、企業(yè)建站、網(wǎng)站導(dǎo)航、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)