hive的Reduce join與Map join

說明

  • hive 中的join可分爲倆類,一種是common join(也叫Reduce join或shuffle join),另一種是 map join,後者是對hive join的一個優化,利用本地的task對較小的表hash生產一個hashtable文件,然後直接和map出來另一個表進行匹配,最終完成join\
  • set hive.auto.convert.join = false 在0.7.0到0.10.0版本默認是false,表示不使用優化
  • set hive.auto.convert.join = true在0.11.0到之後的版本是ture,代表使用優化

reduce join流程圖

這裏寫圖片描述
可以看到普通的join有shuffle

map join流程圖

這裏寫圖片描述
map join 沒有shuffle過程,他是對小表進行hash到hdfs 臨時緩存中生成hashtable file,然後直接匹配。

查看reduce join的執行計劃

  • 設置set hive.auto.convert.join = false,不使用優化

  • 執行計劃

    1. explain [extended] select  e.empno, e.ename, e.deptno, d.dname from emp e join ruoze_dept d on e.deptno = d.deptno ;
    

    通過執行計劃可以看出,正常的join是使用倆個map和一個reduce來完成join,因爲過程中有shuffle,所以會有網絡io,執行效率相對較小

查看map join的執行計劃

  • 設置set hive.auto.convert.join =ture,使用優化
  • 執行計劃

    1. explain [extended] select  e.empno, e.ename, e.deptno, d.dname from emp e join ruoze_dept d on e.deptno = d.deptno ;
    

    使用優化的map join過程中沒有shuffle,是通過本地的一個task hash較小的表(較小的表的識別可以通過元數據信息判斷)生成hashtable file文件,並保存到hdfs的臨時緩存當中,然後通過與map出來的另一個表進行直接匹配,得出結果,因此過程中沒有shuffle,不需要網絡,所以效率相對來說較快,即爲優化

本文中執行計劃沒有顯示出來,詳細的執行計劃可以自己去解讀,每個步驟都有很重要的含義。
來自@若澤大數據

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