MapReduce(四):shuffer原理

fan_rockrock發表於2015-09-18




1、map輸出過程:

           如果沒有reduce階段,則直接輸出到hdfs上,如果有有reduce作業,則每個map方法的輸出在寫磁碟前線在記憶體中快取。每個map task都有一個環狀的記憶體緩衝區,儲存著map的輸出結果,預設100m,在寫磁碟時,根據reduce的數量把資料劃分為相應的分割槽,在每個分割槽中資料進行內排序。在每次當緩衝區快滿的時候由一個獨立的執行緒將緩衝區的資料以一個溢位檔案的方式存放到磁碟,當整個map task結束後再對磁碟中這個map task產生的所有溢位檔案做合併,被合併成已分割槽且已排序的輸出檔案。然後等待reduce task來拉資料


2、reducer如何知道要從哪個tasktracker取得map輸出呢?

      map任務成功完成以後,他們會通知其父tasktracker狀態已更新,然後taskTracker進而通知jobTracker。這些通知在前面的心跳機制中傳輸。

因此,對於指定作業,jobTracker知道map輸出和taskTracker之間的對映關係。reducer中的一個執行緒定期詢問jobTracher以便獲取map輸出的位置,

直到它獲得所有輸出位置。


相關文章