MapReduce當(dāng)中map端做join

map端做join
馬克-to-win @ 馬克java社區(qū):map 端做join和reduce端做join有何區(qū)別?我們前面講的是Reduce端join,因?yàn)镽educe端join需要把所有的數(shù)據(jù)都經(jīng)過(guò) Shuffle,非常消耗資源,效率要遠(yuǎn)遠(yuǎn)低于Map端join。Map端join是指只有map工作,reduce不工作,這樣可以有效的避免數(shù)據(jù)傾斜。





馬克-to-win @ 馬克java社區(qū):什么叫數(shù)據(jù)傾斜(data skew)?假如,你有兩個(gè)reduce節(jié)點(diǎn),數(shù)據(jù)都跑到第一個(gè)節(jié)點(diǎn),(比如p_id=p1的數(shù)據(jù)非常多)第二個(gè)節(jié)點(diǎn)沒(méi)什么數(shù)據(jù), 結(jié)果第一個(gè)節(jié)點(diǎn),工作完成總是卡在99.99%,一直99.99%不能結(jié)束。
馬克- to-win:馬克 java社區(qū):防盜版實(shí)名手機(jī)尾號(hào): 73203。
馬克-to-win@ 馬克java社區(qū):Map端join的流程是什么:1)在setup階段:先把一個(gè),這里就是產(chǎn)品全表(即字典表)所有數(shù)據(jù)讀取到HashMap集合中,2)之后再在map方法中一行一行處理數(shù)據(jù)。缺點(diǎn): 1.需要一個(gè)表(字典表)所有數(shù)據(jù)都加載到緩存中,所以不能太大。所以帶來(lái)的問(wèn)題就是這種mapJoin僅僅適用于大小表,小小表關(guān)聯(lián)。
馬克-to-win @ 馬克java社區(qū):如何做大表和大表的關(guān)聯(lián)? 對(duì)于大表和大表的關(guān)聯(lián): 1.reducejoin可以解決關(guān)聯(lián)問(wèn)題,但不完美,有數(shù)據(jù)傾斜的可能,如前所述。 2.思路:將其中一個(gè)大表進(jìn)行切分,成多個(gè)小表再進(jìn)行關(guān)聯(lián)。