hive中笛卡爾積的優化


 由於一個業務,必須要進行笛卡爾積,但是速度太慢了,left join時左表大概4萬條數據,右表大概 3000多條數據,這樣大概就是一億多條數據,

這在大數據領域其實不算很大的數據量,但是hive中跑的特別慢。因為hive對笛卡爾積支持的不是很好,由於是全局的操作,所以只能在一個reduce中執行,導致速度比較慢。

然后想優化一下,嘗試了一些方法。

比較直接能想到的解決方案是使用mapjoin,hive較高版本中是默認開啟mapjoin的,在開啟狀態下會自動判斷是否使用mapjoin,

我看了一下我的任務,是開啟了mapjoin的

 

 但是還是很慢,不知道是不是mapjoin沒有生效。我關了自動mapjoin試了一下,發現更慢了。。。。看來mapjoin還是有用的。。。。。

所以嘗試了一位網友的建議,很巧妙的一個想法:

 

 注意使用這個最好把默認的自動mapjoin關掉,set hive.auto.convert.join=false,另外就是最好手動設置一下reduce的數量,若復制十倍,set mapred.reduce.tasks = 10,這樣比較保險,但是reduce數量也不是越大越好。

修改之后從mapjoin的600秒降到了不到300秒,大任務上可能效果明顯。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM