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