四虎国产精品永久地址998_chinesexxx少妇露脸_日本丁香久久综合国产精品_一区二区久久久久_四虎av影视_久久久久国产一区二区三区不卡

中培偉業IT資訊頻道
您現在的位置:首頁 > IT資訊 > 數據庫 > 闡述Hadoop實現join的三種方法

闡述Hadoop實現join的三種方法

2021-04-21 16:32:08 | 來源:中培企業IT培訓網

Hadoop實現join的三種方法是什么呢?我們先來說說Hadoop,它是一個由Apache基金會所開發的分布式系統基礎架構。在用戶并不了解分布式底層細節的情況下也可以開發分布式程序。它充分利用集群的威力進行高速運算及存儲。Hadoop它其實實現了一個分布式文件系統,它的框架最核心的設計就是:MapReduce,HDFS。HDFS是為海量的數據提供了存儲空間,而MapReduce就是為海量數據提供了運算。要知道只有當線程結束時,join方法才可以繼續執行相關語句。我們來現在來說說Hadoop實現join的三種方法。

闡述Hadoop實現join的三種方法

第一種:reduce side join

Reducesidejoin是最簡單的連接方式,其主要思想如下:

在映射階段,映射函數同時讀取兩個文件文件1和文件2,為了區分來自兩個源的鍵/值數據對,每個數據都被標記。例如,標記=0表示來自文件文件1,標記=2表示來自文件文件2,即地圖階段的主要任務是標注不同文件中的數據。

在reduce階段,reduce函數從具有相同鍵的File1和File2文件中獲取valuelist,然后將File1和File2中的數據連接到相同的鍵。也就是說,實際的連接操作在減少階段執行。

第二種:map side join

reducesidejoin之所以存在,是因為在映射階段無法獲得所有必要的連接字段,也就是說,相同關鍵詞對應的字段可能在不同的映射中。Reducesidejoin效率不高,因為在洗牌階段有大量的數據傳輸。

Mapsidejoin優化了以下幾個場景:要連接的兩個表中有一個很大,另一個很小,小表可以直接存儲在內存中。這樣,我們就可以在每個maptask內存中制作一個副本(例如存儲在hashtable中),然后只掃描大表:對于大表中的每個記錄鍵/值,找出hashtable中是否有相同的鍵記錄,如果有,連接后輸出。

第三種:SemiJoin

SemiJoin,也稱為半連接,是從分布式數據庫中借用的一種方法。其動機是:對于reducesidejoin,跨機器的數據傳輸量非常大,已經成為join操作的瓶頸。如果能在地圖端過濾掉不參與加入操作的數據,可以大大節省網絡IO。

實現方法很簡單:選擇一個小表,假設是File1.提取它的鍵進行聯接,保存在File3中,文件3通常很小,可以放在內存中。在映射階段,使用分布式緩存將文件3復制到每個任務跟蹤器,然后過濾掉文件2中不在文件3中的鍵對應的記錄。reduce階段的其余工作與reducesidejoin相同。

Mapjoin是把一個數據集的數據放入mapset,在setup中把該集放入緩存,所以涉及到DistributedCache,因為涉及到內存,所以放入緩存的數據集樣本要小,否則不適用,所以這個業務場景比較少。在reduce的連接中,所有需要連接的數據集都作為map的輸入,數據在map的邏輯中標記,數據在reduce中合并,需要用戶自定義數據類型。

以上我們介紹了Hadoop實現join的三種方法,希望能夠對大家有一定的幫助,如果您想繼續了解相關內容,請您繼續關注中培偉業。

標簽: hadoop SemiJoin
主站蜘蛛池模板: 浑源县| 洪江市| 泸水县| 富蕴县| 温泉县| 明溪县| 临澧县| 无极县| 乐昌市| 九江县| 巢湖市| 南川市| 伊金霍洛旗| 夏邑县| 津南区| 吴江市| 聂拉木县| 阿荣旗| 文登市| 策勒县| 务川| 太仆寺旗| 乐山市| 思南县| 东台市| 定州市| 祁门县| 舞钢市| 四平市| 吉隆县| 如皋市| 镇雄县| 宁海县| 武陟县| 花垣县| 固始县| 兰坪| 克拉玛依市| 专栏| 盐津县| 建瓯市|