天天看點

MapReduce 分布式計算架構 簡介 特點 工作流程

MapReduce 計算架構

一種分布式計算架構,解決海量資料的計算問題

MapReduce将整個并行計算過程抽象到兩個函數

  • Map(映射):對一些獨立元素組成的清單的每一個元素進行指定的操作,可以高度并行。
  • Reduce(化簡  歸約):對一個清單的元素進行合并。

一個簡單的MapReduce程式隻需要指定map()、reduce()、input和output,剩下的事由架構完成。

MR的由來

MapReduce最早是有Google公司研究提出的一個種面相大規模資料處理的并行計算模型和方法,設計初 主要是為了解決其公司所提供搜尋引擎中大規模網頁資料的并行化處理系統,MapReduce和GFS的論文 就釋出了,所有就有了我們現在所使用的MapReduce。

MR優點

  • MR易于程式設計,它提供一些簡單統一的接口,可以放程式猿完成一個分布式程式,這個分布式程式可以運作 在大量廉價的PC機器上.
  • 良好的擴充性:當計算資源不能滿足的時候,可以通過簡單的增加啟動來擴充計算能力
  • 高容錯性:假如一台機器挂了,它可以上面的計算任務轉移到另外一個節點上,不會影響任務導緻失敗,這 個過程需要人工幹涉,後期版本的Hadoop提供自動幹預
  • MR适合的是PB級以上海量資料的離線資料處理 

MR缺點

  • MR不适合實時計算,因為内部計算邏輯,是以MR不能以最快的速度得到結果
  • MR不适合計算流式,不适合計算實時資料(動态的資料),MR适合計算靜态資料(固定資料)
  • MR中沒有涉及一個邏輯DAG(有向無環圖),每個MR作業的輸出結果都會寫到磁盤,就會造成大量的IO,會 導緻性能下降

MR相關概念

Job ,使用者的每一個計算請求,稱為一個作業。

Task ,每一個作業,都需要拆分開了,交由多個伺服器來完成,拆分出來的執行機關,就稱為任務。  

Task分為MapTask和ReduceTask兩種,分别進行Map操作和Reduce操作,依據Job設定的Map類和Reduce類

MR工作流程

MapReduce 分布式計算架構 簡介 特點 工作流程

map任務處理

  1. Input Split 配置設定給Map
  2. Map過程進行處理,Mapper任務會接收輸入的分片,然後不斷調用map方法,對記錄進行處理,處理完畢 之後,轉換為新的<key,value>輸出(其中每一個分片對應一個map,一個map可以被調用多次來處理該分 片)
  3. Map的輸出結果會緩存到記憶體裡,當記憶體中buffer in memory當達到阈(yu)值(預設的80%),就會把記錄 溢寫到次磁盤檔案中,然後用剩餘的20%來繼續接收資料。ps:優化map時可以調大buffer的門檻值,緩存更多資料 特殊情況,當達到100%,此時緩沖就不會接受任何資料,直到緩沖區清空才會開始接受
  4. 記憶體中進行Partition(分區),預設是HashPartition ps:此hash采用 hash(key.hashcode() & Integer.MAX_VALUE) % munReduceTasks有多少個分區就會 有多少個reducetask 目的是将map的結果分給不同的reducer,有幾個Partition就有幾個reduce,partition的資料可以在job啟 動的使用通過參數設定,可有讓map的通過均勻的配置設定給不同的機器上的reducer,保證負載均衡
  5. 記憶體中partition結束之後,對于不同分區的資料,會按照key進行排序,這裡key必須實作 WritableComparable接口,該接受實作了Comparable,是以才可以進行比較排序
  6. 對于排序之後的<key.value>會按照key進行分組,如果key相同,name相同key的<key,value>就會被分 到一個組中,最終,每個分組會調用一次reduce方法
  7. 排序分組結束之後,相同的key就在一起組成了一個類表,如果設定過Combiner,就合并資料,減少寫入磁盤。ps:combiner本質即使一個reducer
  8. 當磁盤中的spill檔案數目比規定的檔案資料多的時候,會多次調用combiner,在不影響結果的情況 下,combiner可以被調用多次
  9. Map結束的時候會吧把pill出來的多個檔案合并成一個,merge過程最多10個檔案同時合并成一個檔案, 多餘的檔案就多次調用merge
  10. Map端的shuffle完畢,資料都有序的存放到磁盤中,等待reducer來擷取 

reduce任務處理

  1. reducer的背景會被AppMaster指定的機器上将map的output拷貝到本地,先拷貝到記憶體,記憶體,滿了就 拷貝磁盤
  2. Reducer采用Merge sort将來自各個map的資料進行merge,merge成一個有序的更大的文
  3. reduce端job開始,輸入是shuffle sort過程所産生的檔案
  4. reducer的輸入檔案,不斷的merge後,他們會出現最終檔案,這個最終檔案可能存儲在磁盤也可能在記憶體.

reduce方法就被自動執行目前這個檔案的處理最終該處理結果放到HDFS上

Shuffle過程

先對資料進行切片,然後将資料傳遞給map,map的輸出是記憶體緩沖區(圓形緩沖區),記憶體緩沖區預設大小 是100M,當 達到80%即0.8的時候将資料溢寫到本地,剩餘20%用于繼續擷取資料,在溢寫到磁盤的時候會 執行partition(分區)和 sort(排序),然後對檔案進行合并操作,合并完成之後 reducetask會啟動線程去 mapTask拉取資料,然後進行檔案合并, 并進行排序(歸并),然後将小檔案合并成一個大檔案并調用reduce 方法完成最終輸出效果

繼續閱讀