大數據小白系列 —— MapReduce流程的深刻說明

上一期咱們介紹了MR的基本流程與概念,本期稍微深刻了解一下這個流程,尤爲是比較重要但相對較少被說起的Shuffling過程。程序員

 

Mapping緩存

上期咱們說過,每個mapper進程接收並處理一塊數據,這塊數據的大小默認就是一個HDFS數據塊大小。網絡

 

Mapper處理數據時,基於性能考慮,會使用緩存,緩存的大小有一個默認值(好比100MB),滿了以後,將會寫入磁盤文件。app

 

不過在寫入以前,會在內存中進行分區(partition),分區的數量取決於reducer的數量,實際上也就是由MR框架決定,例如上圖中是3個。在每一個分區內,數據會被按key進行排序,都完成以後,這些數據纔會被寫入磁盤。框架

 

因爲緩存可能屢次被佔滿(上圖中是3次),從而致使屢次磁盤寫入,產生多個磁盤文件,因此每一個mapper結束以後,須要對本身所產生的多個文件進行合併(merge),合併出來的大文件一樣進行分區及分區內的排序。性能

 

一般,這個合併後的文件會被壓縮,以便減小磁盤存儲成本,同時也有利於下降shuffling時的網絡傳輸成本。大數據

 

這些都完成以後,這個所謂的「中間結果」文件,就靜靜地等待reducer來獲取。spa

 

Reducingblog

當一個mapper完成工做以後,全部的reducer們都會收到通知,開始去取該mapper產生的數據文件,不一樣的reducer取走不一樣的分區內的數據。排序

 

因此取數這一步,並非等到全部的mapper都完成纔開始,而是某個mapper一完成,reducer就會去取。

 

當全部mapper都完成,全部的中間結果都已被拷貝至reducer,纔開始真正的reduce操做,對取來的多個分區數據進行合併和統一排序,最終用戶所寫的reduce方法會做用在排序後的每一條數據上,以產生最終結果。

  

Shuffling

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

 

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

 

- END - 

 

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

喜歡本文的朋友們,歡迎長按下圖關注訂閱號程序員雜書館,提早得到更多更新內容,以及領取大數據及Java經典資料。

相關文章
相關標籤/搜索