Hive - 問題 & 解決

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表文件的閾值,進而提高運行效率,解決數據傾斜的問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章