天天看點

Hadoop之MapReduce基本原理

作者:chadchang頭條

1.整體執行流程圖

Hadoop之MapReduce基本原理
Hadoop之MapReduce基本原理

2.Map階段執行流程

Hadoop之MapReduce基本原理
  • 第一階段是把輸入目錄下檔案按照一定的标準逐個進行邏輯切片,形成切片規劃。預設情況下,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方法。經過這一階段,資料量會減少。本階段預設是沒有的。

3.Reduce階段執行流程

Hadoop之MapReduce基本原理
  • 第一階段是Reducer任務會主動從Mapper任務複制其輸出的鍵值對。Mapper任務可能會有很多,是以Reducer會複制多個Mapper的輸出。
  • 第二階段是把複制到Reducer本地資料,全部進行合并,即把分散的資料合并成一個大的資料。再對合并後的資料排序。
  • 第三階段是對排序後的鍵值對調用reduce方法。鍵相等的鍵值對調用一次reduce方法,每次調用會産生零個或者多個鍵值對。最後把這些輸出的鍵值對寫入到HDFS檔案中。

4.Shuffle機制

map階段處理的資料如何傳遞給reduce階段,是MapReduce架構中最關鍵的一個流程,這個流程就叫shuffle。shuffle: 洗牌、發牌——(核心機制:資料分區,排序,合并)。

Hadoop之MapReduce基本原理

shuffle是Mapreduce的核心,它分布在Mapreduce的map階段和reduce階段。一般把從Map産生輸出開始到Reduce取得資料作為輸入之前的過程稱作shuffle。

1).Collect階段:将MapTask的結果輸出到預設大小為100M的環形緩沖區,儲存的是key/value,Partition分區資訊等。2).Spill階段:當記憶體中的資料量達到一定的閥值的時候,就會将資料寫入本地磁盤,在将資料寫入磁盤之前需要對資料進行一次排序的操作,如果配置了combiner,還會将有相同分區号和key的資料進行排序。3).Merge階段:把所有溢出的臨時檔案進行一次合并操作,以確定一個MapTask最終隻産生一個中間資料檔案。 4).Copy階段:ReduceTask啟動Fetcher線程到已經完成MapTask的節點上複制一份屬于自己的資料,這些資料預設會儲存在記憶體的緩沖區中,當記憶體的緩沖區達到一定的閥值的時候,就會将資料寫到磁盤之上。5).Merge階段:在ReduceTask遠端複制資料的同時,會在背景開啟兩個線程對記憶體到本地的資料檔案進行合并操作。6).Sort階段:在對資料進行合并的同時,會進行排序操作,由于MapTask階段已經對資料進行了局部的排序,ReduceTask隻需保證Copy的資料的最終整體有效性即可。Shuffle中的緩沖區大小會影響到mapreduce程式的執行效率,原則上說,緩沖區越大,磁盤io的次數越少,執行速度就越快

繼續閱讀