Hadoop MapReduce基本原理

1、什麼是:

  MapReduce是一種編程模型,用於大規模數據集(大於1TB)的並行運算。概念"Map(映射)"和"Reduce(歸約)",是它們的主要思想,都是從函數式編程語言裏借來的,還有從矢量編程語言裏借來的特性。它極大地方便了編程人員在不會分佈式並行編程的狀況下,將本身的程序運行在分佈式系統上。 當前的軟件實現是指定一個Map(映射)函數,用來把一組鍵值對映射成一組新的鍵值對,指定併發的Reduce(歸約)函數,用來保證全部映射的鍵值對中的每個共享相同的鍵組。算法

  源於Google MapReduce論文(04年)。編程

  Master - Slave 模式。

  MapReduce的核心是:分而治之,並行處理;以及其調度和處理數據的自動化。 網絡

  Hadoop中MR的主要內容:併發

    hadoop序列化writable接口,數據類型app

    應用開發 (debug 單元測試)解決基本數據處理,做業調優編程語言

    工做機制  做業提交流程,做業調度,shuffle與排序分佈式

    MR類型 輸入輸出類型函數式編程

    特性:二次排序(全排、部分排),join函數

    壓縮算法oop

2、基本流程:

一、MR中主要是Map和Reduce兩個階段,其中基本流程是:

  一、mr的數據處理單位是一個split,一個split對應一個map任務,處理時會有多個map任務同時運行;當map從HDFS上讀取一個split時,這裏會有「移動計算,不移動數據」的機制來減小網絡的數據傳輸,使得效率能最大化;

  二、獲取到split時,默認會以TextInputFormat的格式讀入,文件中的字符位置的偏移量做爲 key,以及每一行的數據做爲 value;

  三、以後則進入map函數中進行處理,這個階段能夠獲取須要的數據並加以處理,並以key value的形式寫出,做爲後面reduce函數的輸入;

  四、map到reduce之間會有一個shuffle的過程,大體過程是把不一樣key利用partitioner分散到各個reduce節點上去;

  五、在reduce上會先經過 比較排序(前面shuffl會有預排序) 進行文件的歸併,以後進入reduce函數,在每一個reduce函數中key是惟一的,對應的value則是一個 Iterable接口類型,經過Iterable能夠遍歷全部當前key對應的全部value;

  六、以後在reduce中對數據進行處理後,利用OutputFormat對處理後的key value保存到HDFS上即完成了整個流程。

  注:一個split的大小計算:max( minimumSize, min( maximumSize, blockSize ));

            一般 blockSize 在 minimumSize和maximumSize之間,因此通常分片大小就是塊大小。

 

二、流程圖:

  

 

三、編程中可定製的類:

  InputFormat —> Mapper —> Partitioner (HashPartitioner) —> Combiner —> Reducer —> OutputFormat

四、shuffle過程:map輸出 到 reduce獲取數據的過程。

 
   Map端:
    map輸出 -> 寫入內存緩衝區,考慮效率進行預排序 ->
    a. 達到緩衝區閾值(0.8),一個線程便開始把內容溢出到磁盤。在溢出到磁盤的過程當中,map輸出繼續寫到緩衝區,若此期間緩衝區被填滿,map將被阻塞直到寫磁盤過程完成。
    b. 每當達到緩衝區閾值時,就會新建一個溢出文件(spill file);所以在任務完成前,會有幾個溢出文件,並最終合併成一個已分區且已排序的輸出文件。
    c.在寫入磁盤以前,線程首先根據reduce把數據劃分紅相應的分區(partition)。在每一個分區中,會按鍵進行排序,若是有combiner,它就在排序後運行。combiner使得map輸出更緊湊,可減小寫到磁盤和傳到reduce的數據。
 
    若是存在至少3個溢出文件,則combiner會在溢出文件合併前再次運行。若是低於3個則不會運行,由於不值得調用。
 
   Reduce端:
    map的輸出存儲在運行map任務的tasktracker的節點磁盤上。
 
    獲取數據 -> 排序合併 -> reduce
    每一個map節點運行時間不同,只要有一個節點完成,reduce任務就會開始獲取其輸出。reduce任務有少許並行線程可同時獲取map端數據。
    若map端輸出很小,則數據會被複制到redeuce任務的JVM內存中。若大於一個指定閾值,則獲取的數據會合並後存儲到本地磁盤中,合併階段會維持原map輸出的鍵順序。或指定有combiner,則會在合併期間運行以下降寫入磁盤數據量。
    在redece階段,會對已排序輸出中的每鍵調用reduce函數,些階段的輸出直接寫到HDFS上。
 
  combiner運行3次:分區內、溢出文件大於三、reduce合併文件
  排序運行2次:分區中預排序、reduce排序
  

 

3、優缺點:

  優勢:

      1. 易於編程
      2. 良好的擴展性,增長機器來擴展計算能力
      3. 高容錯性
      4. 適合PB級以上海量數據離線處理。
 
  缺點:
      1. 實時計算
      2. 流式計算
      3. DAG有向圖計算
 
  應用:網站pv uv統計,搜索引擎索引,海量數據查找與統計,複雜數據分析算法實現。
相關文章
相關標籤/搜索