深刻MapReduce

1. MapReduce的輸入和輸出app

MapReduce框架運轉在<key,value>鍵值對上,也就是說,框架把做業的輸入當作是一組<key,value>鍵值對,一樣也產生一組<key,value>鍵值對做爲做業的輸出,這兩組鍵值對多是不一樣的。框架

一個MapReduce做業的輸入和輸出類型以下圖所示:能夠看出在整個標準的流程中,會有三組<key,value>鍵值對類型的存在。
深刻MapReduce
2. MapReduce的處理流程解析2.1. Mapper任務執行過程詳解ide

l 第一階段是把輸入目錄下文件按照必定的標準逐個進行邏輯切片,造成切片規劃。默認狀況下,Split size = Block size。每個切片由一個MapTask處理。(getSplits)函數

l 第二階段是對切片中的數據按照必定的規則解析成<key,value>對。默認規則是把每一行文本內容解析成鍵值對。key是每一行的起始位置(單位是字節),value是本行的文本內容。(TextInputFormat)orm

l 第三階段是調用Mapper類中的map方法。上階段中每解析出來的一個<k,v>,調用一次map方法。每次調用map方法會輸出零個或多個鍵值對。blog

l 第四階段是按照必定的規則對第三階段輸出的鍵值對進行分區。默認是隻有一個區。分區的數量就是Reducer任務運行的數量。默認只有一個Reducer任務。排序

l 第五階段是對每一個分區中的鍵值對進行排序。首先,按照鍵進行排序,對於鍵相同的鍵值對,按照值進行排序。好比三個鍵值對<2,2>、<1,3>、<2,1>,鍵和值分別是整數。那麼排序後的結果是<1,3>、<2,1>、<2,2>。若是有第六階段,那麼進入第六階段;若是沒有,直接輸出到文件中。開發

l 第六階段是對數據進行局部聚合處理,也就是combiner處理。鍵相等的鍵值對會調用一次reduce方法。通過這一階段,數據量會減小。本階段默認是沒有的。get

 

2.2. Reducer任務執行過程詳解it

l 第一階段是Reducer任務會主動從Mapper任務複製其輸出的鍵值對。Mapper任務可能會有不少,所以Reducer會複製多個Mapper的輸出。

l 第二階段是把複製到Reducer本地數據,所有進行合併,即把分散的數據合併成一個大的數據。再對合並後的數據排序。

l 第三階段是對排序後的鍵值對調用reduce方法。鍵相等的鍵值對調用一次reduce方法,每次調用會產生零個或者多個鍵值對。最後把這些輸出的鍵值對寫入到HDFS文件中。

在整個MapReduce程序的開發過程當中,咱們最大的工做量是覆蓋map函數和覆蓋reduce函數。

相關文章
相關標籤/搜索