四虎国产精品永久地址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
主站蜘蛛池模板: 广安市| 韶山市| 吉木乃县| 武冈市| 恭城| 柳州市| 郑州市| 莱西市| 钟祥市| 化德县| 荔波县| 陇西县| 石门县| 松江区| 茌平县| 吴堡县| 鹤壁市| 天台县| 行唐县| 龙江县| 克山县| 加查县| 射阳县| 白朗县| 台湾省| 桐庐县| 眉山市| 昆山市| 西藏| 宝鸡市| 宕昌县| 赞皇县| 和林格尔县| 麻江县| 鄂托克旗| 宣恩县| 铁岭县| 托克托县| 西青区| 营山县| 罗源县|