天天看點

Hive中使用MAP JOIN1 概述2 相關參數

若所有表中隻有一張小表,那可在最大的表通過mapper的時候将小表完全放到記憶體中,hive可以在map端執行連接配接過程,稱為map-side join,這是因為hive可以和記憶體的小表逐一比對,進而省略掉正常連接配接所需的reduce過程。即使對于很小的資料集,這個優化也明顯地要快于正常的連接配接操作。其不僅減少了reduce過程,而且有時還可以同時減少map過程的執行步驟。

使用mapjoin可解決以下實際問題:

a 有一個極小的表<1000行(a是小表)

b 需要做不等值join操作(a.x<b.y或者a.x like b.y等)。普通join文法不支援不等于操作,hive文法解析會直接抛出錯誤。

2.1 小表自動選擇mapjoin

set hive.auto.convert.join=true;

預設值:false。該參數為true時,hive自動對左邊的表統計量,若是小表就加入記憶體,即對小表使用map join

2.2 小表閥值

set hive.mapjoin.smalltable.filesize=25000000;

預設值:25m

2.3 map join做group by操作時,可使用多大的記憶體來存儲資料。若資料太大則不會儲存在記憶體裡

set hive.mapjoin.followby.gby.localtask.max.memory.usage;  

預設值:0.55

2.4 本地任務可以使用記憶體的百分比

set hive.mapjoin.localtask.max.memory.usage;  

預設值:0.90

參考位址:http://blog.csdn.net/kwu_ganymede/article/details/51365002