1. 程式人生 > >HIve map jion的原理、操作和使用場景

HIve map jion的原理、操作和使用場景

一:hive mapjion的使用場景:

1.關聯操作中有一張表非常小(有嚴重的資料傾斜)
2.不等值的連結操作
Join有多個關聯鍵,則以這些關聯鍵的組合作為key;Map輸出的value為join之後所關心的(select或者where中需要用到的)列

二:原理

Hive Map Join
MapJoin通常用於一個很小的表和一個大表進行join的場景,具體小表有多小,由引數hive.mapjoin.smalltable.filesize來決定,預設值為25M。滿足條件的話Hive在執行時候會自動轉化為MapJoin,或使用hint提示 /*+ mapjoin(table) */執行MapJoin。
在這裡插入圖片描述


解釋:
如上圖中的流程,
1.Task A在客戶端本地執行,負責掃描小表b的資料,將其轉換成一個HashTable的資料結構,並寫入本地的檔案中,
2.將該檔案載入到DistributeCache中。
3.Task B任務是一個沒有Reduce的MapReduce,啟動MapTasks掃描大表a,在Map階段,根據a的每一條記錄去和DistributeCache中b表對應的HashTable關聯,並直接輸出結果,
因為沒有Reduce,所以有多少個Map Task,就有多少個結果檔案。
注意:Map JOIN不適合FULL/RIGHT OUTER JOIN。

三:操作

1.配置一下引數,Hive會自動根據SQL選擇common join或者是Map Join。

hive (hive)> set hive.auto.convert.join=true;
hive (hive)> set hive.mapjoin.smalltable.filesize=25000000;(預設值就是25MB)

2.我們還可以手動指定使用Map join:

hive (hive)> select /*+mapjoin(post)*/ user.id,user.name,post.pid,post.title from  user
           > join post
           > on user.id =post.uid;

四:優勢

1.不消耗叢集的reduce資源。

2.減少了reduce操作,加快了程式執行。

3.降低網路負載。