大資料小白系列 —— MapReduce流程的深入說明

Morven.Huang發表於2019-03-16

上一期我們介紹了MR的基本流程與概念,本期稍微深入瞭解一下這個流程,尤其是比較重要但相對較少被提及的Shuffling過程。

 

Mapping

上期我們說過,每一個mapper程式接收並處理一塊資料,這塊資料的大小預設就是一個HDFS資料塊大小。

 

Mapper處理資料時,基於效能考慮,會使用快取,快取的大小有一個預設值(比如100MB),滿了之後,將會寫入磁碟檔案。

 

不過在寫入之前,會在記憶體中進行分割槽(partition),分割槽的數量取決於reducer的數量,實際上也就是由MR框架決定,例如上圖中是3個。在每個分割槽內,資料會被按key進行排序,都完成之後,這些資料才會被寫入磁碟。

 

由於快取可能多次被佔滿(上圖中是3次),從而導致多次磁碟寫入,產生多個磁碟檔案,所以每個mapper結束之後,需要對自己所產生的多個檔案進行合併(merge),合併出來的大檔案同樣進行分割槽及分割槽內的排序。

 

通常,這個合併後的檔案會被壓縮,以便減少磁碟儲存成本,同時也有利於降低shuffling時的網路傳輸成本。

 

這些都完成之後,這個所謂的“中間結果”檔案,就靜靜地等待reducer來獲取。

 

Reducing

當一個mapper完成工作之後,所有的reducer們都會收到通知,開始去取該mapper產生的資料檔案,不同的reducer取走不同的分割槽內的資料。

 

所以取數這一步,並不是等到所有的mapper都完成才開始,而是某個mapper一完成,reducer就會去取。

 

當所有mapper都完成,所有的中間結果都已被拷貝至reducer,才開始真正的reduce操作,對取來的多個分割槽資料進行合併和統一排序,終端使用者所寫的reduce方法會作用在排序後的每一條資料上,以產生最終結果。

  

Shuffling

上述所說的發生在mapping與reducing之間的資料排序、合併、及拷貝的過程,包括mapping側的一部分好reducing側的一部分,即圖中紅色框出部分,統稱為shuffling。

 

這一步驟的特點是什麼?就是重磁碟IO、重網路IO,知道這一點很重要。

 

- END - 

 

好了,本期就先到這兒,下一期講講MR的優點、侷限性等內容。

喜歡本文的朋友們,歡迎長按下圖關注訂閱號程式設計師雜書館,提前獲得更多更新內容,以及領取大資料及Java經典資料。

相關文章