Hive優(yōu)化之笛卡爾積優(yōu)化(三) 大表Join大表+數(shù)據(jù)傾斜

本篇講解Hive大表N:N關(guān)聯(lián)的小笛卡爾積+數(shù)據(jù)傾斜的優(yōu)化方法


上一篇SMB Join發(fā)現(xiàn)卡在一個map,看日志發(fā)現(xiàn)comm_id=102073766數(shù)據(jù)量很大,檢查數(shù)據(jù)分布


comm_id=102073766以外,top20數(shù)據(jù)量都在2500-4000,3873* 3873≈1600w,問題不大,4w*4w=16億 問題很大

我們知道Mapjoin可以解決大笛卡爾積,所以改用SMBjoin+Mapjoin,只將comm_id=102073766 單拎出來做Map join

1.建分桶表

2.插入分桶表(剔除comm_id=102073766)

3.SMB Join

4.comm_id=102073766建A表(利用distubute by, 做160個block)

5.再建一張只有1個block的B表,與A表數(shù)據(jù)相同

6.Map join 將b表廣播到A表160個maptask關(guān)聯(lián)

最后將兩張結(jié)果表union all

代碼太長就不貼了,參數(shù)前兩篇都有,意思到了就行

本篇總結(jié):SMB Join可以解決小笛卡爾積,但相同的key都會在同一個task中join,無法解決數(shù)據(jù)傾斜。將數(shù)據(jù)傾斜的key單拎出來做Mapjoin,兩者配合食用, 這樣就可以解決小笛卡爾積+數(shù)據(jù)傾斜Join.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容