91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hive中Join的原理和機制是什么

發布時間:2021-06-24 10:11:48 來源:億速云 閱讀:146 作者:chen 欄目:編程語言

本篇內容介紹了“Hive中Join的原理和機制是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

九、Hive中Join的原理和機制

籠統的說,Hive中的Join可分為Common Join(Reduce階段完成join)和Map Join(Map階段完成join)。本文簡單介紹一下兩種join的原理和機制。

9.1 Hive Common Join

如果不指定MapJoin或者不符合MapJoin的條件,那么Hive解析器會將Join操作轉換成Common Join,即:在Reduce階段完成join.
整個過程包含Map、Shuffle、Reduce階段。

  • Map階段

讀取源表的數據,Map輸出時候以Join on條件中的列為key,如果Join有多個關聯鍵,則以這些關聯鍵的組合作為key;
Map輸出的value為join之后所關心的(select或者where中需要用到的)列;同時在value中還會包含表的Tag信息,用于標明此value對應哪個表;
按照key進行排序

  • Shuffle階段

根據key的值進行hash,并將key/value按照hash值推送至不同的reduce中,這樣確保兩個表中相同的key位于同一個reduce中

  • Reduce階段
    根據key的值完成join操作,期間通過Tag來識別不同表中的數據。

以下面的HQL為例,圖解其過程:

 
  1. SELECT

  2. a.id,a.dept,b.age

  3. FROM a join b

  4. ON (a.id = b.id);

Hive中Join的原理和機制是什么

看了這個圖,應該知道如何使用MapReduce進行join操作了吧。

9.2 Hive 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.
仍然以9.1中的HQL來說吧,假設a表為一張大表,b為小表,并且hive.auto.convert.join=true,那么Hive在執行時候會自動轉化為MapJoin。

Hive中Join的原理和機制是什么

  • 如圖中的流程,首先是Task A,它是一個Local Task(在客戶端本地執行的Task),負責掃描小表b的數據,將其轉換成一個HashTable的數據結構,并寫入本地的文件中,之后將該文件加載到DistributeCache中,該HashTable的數據結構可以抽象為:

keyvalue
126
234

Hive中Join的原理和機制是什么

圖中紅框圈出了執行Local Task的信息。

  • 接下來是Task B,該任務是一個沒有Reduce的MR,啟動MapTasks掃描大表a,在Map階段,根據a的每一條記錄去和DistributeCache中b表對應的HashTable關聯,并直接輸出結果。

  • 由于MapJoin沒有Reduce,所以由Map直接輸出結果文件,有多少個Map Task,就有多少個結果文件。

“Hive中Join的原理和機制是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

通道| 武强县| 于都县| 女性| 内黄县| 张掖市| 马公市| 肃宁县| 崇明县| 虎林市| 广安市| 海盐县| 博爱县| 满城县| 文登市| 西贡区| 嘉定区| 北票市| 华池县| 长阳| 安西县| 宁强县| 临海市| 马鞍山市| 和林格尔县| 洱源县| 马龙县| 湖南省| 永修县| 虎林市| 吴旗县| 邵阳县| 台湾省| 伊宁市| 闽清县| 朝阳区| 巴东县| 方山县| 忻城县| 长宁区| 万年县|