1. 程式人生 > >MapReduce程式設計之Join多種應用場景與使用

MapReduce程式設計之Join多種應用場景與使用

這裡主要分析一下reduce join的一些不足。之所以會存在reduce join這種方式,是因為整體資料被分割了,每個map task只處理一部分資料而不能夠獲取到所有需要的join欄位,因此我們可以充分利用mapreduce框架的特性,讓他按照join key進行分割槽,將所有join key相同的記錄集中起來進行處理,所以reduce join這種方式就出現了。

這種方式的缺點很明顯就是會造成mapreduce端也就是shuffle階段出現大量的資料傳輸,效率很低。

Map join

Map Join 實現方式一

● 使用場景:一張表十分小、一張表很大。

● 用法:

在提交作業的時候先將小表文件放到該作業的DistributedCache中,然後從

DistributeCache中取出該小表進行join (比如放到Hash Map等等容器中)。然後掃描大表,

看大表中的每條記錄的join key /value值是否能夠在記憶體中找到相同join key的記錄,如果有則直接輸出結果。

DistributedCache是分散式快取的一種實現,它在整個MapReduce框架中起著相當重要的作用,他可以支撐我們寫一些相當複雜高效的分散式程式。說回到這裡,JobTracker在作業啟動之前會獲取到DistributedCache的資源uri列表,並將對應的檔案分發到各個涉及到該作

業的任務的TaskTracker上。另外,關於DistributedCache和作業的關係,比如許可權、儲存路徑區分、public和private等屬性。

● 程式碼實現: