MapReduce當中map端做join

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





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