1 Hive - mapjoin
問題:
hive sql:select f.a,f.b from A t join B f on ( f.a=t.a and f.ftime=20110802)
該語句中B表有30億行記錄,A表只有100行記錄,而且B表中數據傾斜特別嚴重,有一個key上有15億行記錄,在運行過程中特別的慢,而且會在reduce的過程中遇到內存不夠而報錯
解決方案:
考慮使用mapjoin,mapjoin會把小表全部讀入內存中,在map階段直接拿另外一個表的數據和內存中的表數據做匹配,將join操作放到map階段,提高了運行效率,一定程度上可以解決數據傾斜問題
MapJoin:
hive> set hive.auto.convert.join=true; //默認爲true,已經開啓
hive.mapjoin.smalltable.filesize=25000000 //表文件的大小作爲開啓和關閉MapJoin的閾值
實際生產環境,我們可以通過set hive.mapjoin.smalltable.filesize的方式,提高開啓MapJoin表文件的閾值,進而提高運行效率,解決數據傾斜的問題