天天看點

MapReduce之mapper任務執行流程詳解

        第一階段是把輸入目錄下檔案按照一定的标準逐個進行邏輯切片,形成切片規劃。預設情況下,Split size = Block size。每一個切片由一個MapTask 處理。(getSplits)

第二階段是對切片中的資料按照一定的規則解析成<key,value>對。預設規則是把每一行文本内容解析成鍵值對。key 是每一行的起始位置(機關是位元組),value 是本行的文本内容。(TextInputFormat)

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

第四階段是按照一定的規則對第三階段輸出的鍵值對進行分區。預設是隻有一個區。分區的數量就是 Reducer 任務運作的數量。預設隻有一個Reducer 任務。

第五階段是對每個分區中的鍵值對進行排序。首先,按照鍵進行排序,對于鍵相同的鍵值對,按照值進行排序。比如三個鍵值對<2,2>、<1,3>、<2,1>,鍵和值分别是整數。那麼排序後的結果是<1,3>、<2,1>、<2,2>。如果有第六階段,那麼進入第六階段;如果沒有,直接輸出到檔案中。

第六階段是對資料進行局部聚合處理,也就是 combiner 處理。鍵相等的鍵值對會調用一次 reduce 方法。經過這一階段,資料量會減少。 本階段預設是沒有的 

繼續閱讀