詳解MapReduce執行流程

1

mr原理web


       Mapreduce是一個分佈式運算程序的編程框架,是用戶開發「基於hadoop的數據分析應用」的核心框架;面試

       Mapreduce核心功能是將用戶編寫的業務邏輯代碼和自帶默認組件整合成一個完整的分佈式運算程序,併發運行在一個hadoop集羣上;算法

2

爲何要用mapreduce編程


  • 海量數據在單機上處理由於硬件資源限制,沒法勝任緩存

  • 而一旦將單機版程序擴展到集羣來分佈式運行,將極大增長程序的複雜度和開發難度微信

  • 引入mapreduce框架後,開發人員能夠將絕大部分工做集中在業務邏輯的開發上,而將分佈式計算中的複雜性交由框架來處理併發


3

 mapreduce結構及核心運行機制app


1

結構框架






一個完整的mapreduce程序在分佈式運行時有三類實例進程:編輯器

  • MRAppMaster:負責整個程序的過程調度及狀態協調

  • mapTask:負責map階段的整個數據處理流程

  • ReduceTask:負責reduce階段的整個數據處理流程

思想:分而治之,先分後合


2
總體流程圖



      其中,maptask的數量是不能設置的,reducetask能夠本身設置job.setNumReduceTasks(5);


3
流程解析


1.一個mr程序啓動的時候,最早啓動的是MRAppMaster,MRAppMaster啓動後根據本次job的描述信息,計算出須要的maptask實例數量,而後向集羣申請機器啓動相應數量的maptask進程

2.maptask進程啓動以後,根據給定的數據切片範圍進行數據處理,主體流程爲:

  • 利用客戶指定的inputformat來獲取RecordReader讀取數據,造成輸入KV對

  • 將輸入KV對傳遞給客戶定義的map()方法,作邏輯運算,並將map()方法輸出的KV對收集到緩存

  • 將緩存中的KV對按照K分區排序後不斷溢寫到磁盤文件


3.MRAppMaster監控到全部maptask進程任務完成以後,會根據客戶指定的參數啓動相應數量的reducetask進程,並告知reducetask進程要處理的數據範圍(數據分區)

4.Reducetask進程啓動以後,根據MRAppMaster告知的待處理數據所在位置,從若干臺maptask運行所在機器上獲取到若干個maptask輸出結果文件,並在本地進行從新歸併排序,而後按照相同key的KV爲一個組,調用客戶定義的reduce()方法進行邏輯運算,並收集運算輸出的結果KV,而後調用客戶指定的outputformat將結果數據輸出到外部存儲


4

shuffle機制


1
概述


  1. mapreduce中,map階段處理的數據如何傳遞reduce階段,是mapreduce框架中最關鍵的一個流程,這個流程就叫shuffle;

  2. shuffle: 洗牌、發牌——(核心機制:數據分區,排序,緩存);

  3. 具體來講:就是將maptask輸出的處理結果數據,分發給reducetask,並在分發的過程當中,對數據按key進行了分區和排序


2

主要流程






shuffle是MR處理流程中的一個過程,它的每個處理步驟是分散在各個map task和reduce task節點上完成的,總體來看,分爲3個操做:

  • 分區partition

  • Sort根據key排序

  • Combiner進行局部value的合併


具體來講就是將maptask輸出的處理結果數據,分發給reducetask,並在分發的過程當中,對數據按key進行了分區和排序;


3
詳細流程


  1. maptask收集咱們的map()方法輸出的kv對,先進入分區方法,把數據標記好分區,而後把數據發送到內存緩衝區(默認100M)

  2. 當環形緩衝區達到80%時,進行溢寫,從內存緩衝區不斷溢出本地磁盤文件,可能會溢出多個文件 (溢寫前對數據進行快速排序,排序按照key的索引進行字典順序排序)

  3. 多個溢出文件會被合併成大的溢出文件(歸併排序算法),對溢寫的文件也能夠進行combiner操做,前提是彙總操做,求平均值不行。

  4. 在溢出過程當中,及合併的過程當中,都要調用partitoner進行分組和針對key進行排序

  5. reducetask根據本身的分區號,去各個maptask機器上取相應的結果分區數據,拉取的數據先存儲在內存中,內存不夠了,再存儲到磁盤。

  6. reducetask會取到同一個分區的來自不一樣maptask的結果文件,reducetask會將這些文件再進行合併(歸併排序)

  7. 合併成大文件後,shuffle的過程也就結束了,後面進入reducetask的邏輯運算過程(從文件中取出一個一個的鍵值對group,調用用戶自定義的reduce()方法)

Shuffle中的緩衝區大小會影響到mapreduce程序的執行效率,原則上說,緩衝區越大,磁盤io的次數越少,執行速度就越快

緩衝區的大小能夠經過參數調整,  參數:io.sort.mb  默認100M


2020大數據面試題真題總結(附答案)

一文探究數據倉庫體系(2.7萬字建議收藏)

數據建模知多少?

如何寫好一篇數據部門規範文檔

如何優化整個數倉的執行時長(好比7點全部任務跑完,如何優化到5點)

從0-1建設數倉遇到什麼問題?怎麼解決的?

Hive調優,數據工程師成神之路

數據質量那點事

簡述元數據管理

Sqoop or Datax

left join(on&where)

大廠高頻面試題-連續登陸問題

朋友面試數據研發崗遇到的面試題

簡單聊一聊大數據學習之路

朋友面試數據專家崗遇到的面試題

HADOOP快速入門

數倉工程師的利器-HIVE詳解


本文分享自微信公衆號 - 大數據私房菜(datagogogo)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索