這篇文章給大家分享的是有關Hive中如何使用MAP JOIN的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
Hive中簡介及使用MAP JOIN
Hive中的Join可分為Common Join(Reduce階段完成join)和Map Join(Map階段完成join)。本文簡單介紹一下mapjoin的原理和機制。
一、MAP JOIN圖
二、概述
MapJoin通常用于一個很小的表和一個大表進行join的場景,具體小表有多小,由參數hive.mapjoin.smalltable.filesize來決定,該參數表示小表的總大小,默認值為25000000字節,即25M。
Hive0.7之前,需要使用hint提示 /*+ mapjoin(table) */才會執行MapJoin,否則執行Common Join,但在0.7版本之后,默認自動會轉換Map Join,由參數hive.auto.convert.join來控制,默認為true.
假設a表為一張大表,b為小表,并且hive.auto.convert.join=true,那么Hive在執行時候會自動轉化為MapJoin。
三、測試
1、兩表關聯:
點擊(此處)折疊或打開
select e.empno,e.ename,e.deptno,d.deptno,d.dname from emp e join dept d on e.deptno = d.deptno;
條件:emp表數據為1000條,dept表數據為100條;
說明:執行時間mapjoin會通過元數據(metadata)進行查找,發現是否存在小表(根據hive.mpajoin.samlltable.filesize參數設置,判斷是否為小表。此參數默認25M)。
存在小表時將先行進行小表加載到內存中,即dept表,如上HQL語句將dept表加載至內存中,最后再用emp表中數據一條一條與內存中數據進行關聯查詢。
2、多表關聯
條件:emp表數據為1000條,dept表數據為100條,emp_partition表數據為500條;
點擊(此處)折疊或打開
select e.empno,e.ename,e.deptno,d.deptno,d.dname from emp e join dept d join emp_partition c on e.deptno = d.deptno and e.empno = c.empno;
說明:執行時間mapjoin會通過元數據(metadata)進行查找,發現是否存在小表(根據hive.mpajoin.samlltable.filesize參數設置,判斷是否為小表。此參數默認25M)。
存在小表時將先行進行小表加載到內存中,即dept、emp_partition表,如上HQL語句將dept表加載至內存中,最后再用emp表中數據一條一條與內存中數據進行關聯查詢。
注:以上可以對照SQL的執行計劃或執行日志更詳細,后續補充相關截圖及說明
四、使用MAPJOIN可解決以下實際問題:
1、有一個極小的表<100行(d表是部門)
2、需要做不等值join操作(a.x<b.y或者a.x like="" b.y等)。普通join語法不支持不等于操作,hive語法解析會直接拋出錯誤。="" 五、相關參數
點擊(此處)折疊或打開
1、小表自動選擇Mapjoin
set hive.auto.convert.join=true;
默認值:false。該參數為true時,Hive自動對左邊的表統計量,若是小表就加入內存,即對小表使用Map join
2、小表閥值
set hive.mapjoin.smalltable.filesize=25000000;
默認值:25M
hive.smalltable.filesize (replaced by hive.mapjoin.smalltable.filesize in Hive 0.8.1)
3、map join做group by操作時,可使用多大的內存來存儲數據。若數據太大則不會保存在內存里
set hive.mapjoin.followby.gby.localtask.max.memory.usage;
默認值:0.55
4、本地任務可以使用內存的百分比
set hive.mapjoin.localtask.max.memory.usage;
默認值:0.90
感謝各位的閱讀!關于“Hive中如何使用MAP JOIN”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。