MapReduce程式設計之Join多種應用場景與使用
阿新 • • 發佈:2019-02-02
這裡主要分析一下reduce join的一些不足。之所以會存在reduce join這種方式,是因為整體資料被分割了,每個map task只處理一部分資料而不能夠獲取到所有需要的join欄位,因此我們可以充分利用mapreduce框架的特性,讓他按照join key進行分割槽,將所有join key相同的記錄集中起來進行處理,所以reduce join這種方式就出現了。
這種方式的缺點很明顯就是會造成map和reduce端也就是shuffle階段出現大量的資料傳輸,效率很低。
Map join
Map Join 實現方式一
● 使用場景:一張表十分小、一張表很大。
● 用法:
在提交作業的時候先將小表文件放到該作業的DistributedCache中,然後從
DistributeCache中取出該小表進行join (比如放到Hash Map等等容器中)。然後掃描大表,
看大表中的每條記錄的join key /value值是否能夠在記憶體中找到相同join key的記錄,如果有則直接輸出結果。
DistributedCache是分散式快取的一種實現,它在整個MapReduce框架中起著相當重要的作用,他可以支撐我們寫一些相當複雜高效的分散式程式。說回到這裡,JobTracker在作業啟動之前會獲取到DistributedCache的資源uri列表,並將對應的檔案分發到各個涉及到該作
業的任務的TaskTracker上。另外,關於DistributedCache和作業的關係,比如許可權、儲存路徑區分、public和private等屬性。
● 程式碼實現: