溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MapReduce是怎么執(zhí)行的

發(fā)布時(shí)間:2022-01-18 15:55:43 來源:億速云 閱讀:116 作者:柒染 欄目:大數(shù)據(jù)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)MapReduce是怎么執(zhí)行的,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

1mr原理


       Mapreduce是一個(gè)分布式運(yùn)算程序的編程框架,是用戶開發(fā)“基于hadoop的數(shù)據(jù)分析應(yīng)用”的核心框架;

       Mapreduce核心功能是將用戶編寫的業(yè)務(wù)邏輯代碼和自帶默認(rèn)組件整合成一個(gè)完整的分布式運(yùn)算程序,并發(fā)運(yùn)行在一個(gè)hadoop集群上;

為什么要用mapreduce


  • 海量數(shù)據(jù)在單機(jī)上處理因?yàn)橛布Y源限制,無法勝任

  • 而一旦將單機(jī)版程序擴(kuò)展到集群來分布式運(yùn)行,將極大增加程序的復(fù)雜度和開發(fā)難度

  • 引入mapreduce框架后,開發(fā)人員可以將絕大部分工作集中在業(yè)務(wù)邏輯的開發(fā)上,而將分布式計(jì)算中的復(fù)雜性交由框架來處理


3 mapreduce結(jié)構(gòu)及核心運(yùn)行機(jī)制


1結(jié)構(gòu)






一個(gè)完整的mapreduce程序在分布式運(yùn)行時(shí)有三類實(shí)例進(jìn)程:

  • MRAppMaster:負(fù)責(zé)整個(gè)程序的過程調(diào)度及狀態(tài)協(xié)調(diào)

  • mapTask:負(fù)責(zé)map階段的整個(gè)數(shù)據(jù)處理流程

  • ReduceTask:負(fù)責(zé)reduce階段的整個(gè)數(shù)據(jù)處理流程

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



2整體流程圖



MapReduce是怎么執(zhí)行的


      其中,maptask的數(shù)量是不能設(shè)置的,reducetask可以自己設(shè)置job.setNumReduceTasks(5);


3流程解析


1.一個(gè)mr程序啟動(dòng)的時(shí)候,最先啟動(dòng)的是MRAppMaster,MRAppMaster啟動(dòng)后根據(jù)本次job的描述信息,計(jì)算出需要的maptask實(shí)例數(shù)量,然后向集群申請(qǐng)機(jī)器啟動(dòng)相應(yīng)數(shù)量的maptask進(jìn)程

2.maptask進(jìn)程啟動(dòng)之后,根據(jù)給定的數(shù)據(jù)切片范圍進(jìn)行數(shù)據(jù)處理,主體流程為:

  • 利用客戶指定的inputformat來獲取RecordReader讀取數(shù)據(jù),形成輸入KV對(duì)

  • 將輸入KV對(duì)傳遞給客戶定義的map()方法,做邏輯運(yùn)算,并將map()方法輸出的KV對(duì)收集到緩存

  • 將緩存中的KV對(duì)按照K分區(qū)排序后不斷溢寫到磁盤文件


3.MRAppMaster監(jiān)控到所有maptask進(jìn)程任務(wù)完成之后,會(huì)根據(jù)客戶指定的參數(shù)啟動(dòng)相應(yīng)數(shù)量的reducetask進(jìn)程,并告知reducetask進(jìn)程要處理的數(shù)據(jù)范圍(數(shù)據(jù)分區(qū))

4.Reducetask進(jìn)程啟動(dòng)之后,根據(jù)MRAppMaster告知的待處理數(shù)據(jù)所在位置,從若干臺(tái)maptask運(yùn)行所在機(jī)器上獲取到若干個(gè)maptask輸出結(jié)果文件,并在本地進(jìn)行重新歸并排序,然后按照相同key的KV為一個(gè)組,調(diào)用客戶定義的reduce()方法進(jìn)行邏輯運(yùn)算,并收集運(yùn)算輸出的結(jié)果KV,然后調(diào)用客戶指定的outputformat將結(jié)果數(shù)據(jù)輸出到外部存儲(chǔ)


4 shuffle機(jī)制


1概述

  1. mapreduce中,map階段處理的數(shù)據(jù)如何傳遞reduce階段,是mapreduce框架中最關(guān)鍵的一個(gè)流程,這個(gè)流程就叫shuffle;

  2. shuffle: 洗牌、發(fā)牌——(核心機(jī)制:數(shù)據(jù)分區(qū),排序,緩存);

  3. 具體來說:就是將maptask輸出的處理結(jié)果數(shù)據(jù),分發(fā)給reducetask,并在分發(fā)的過程中,對(duì)數(shù)據(jù)按key進(jìn)行了分區(qū)和排序


2主要流程






MapReduce是怎么執(zhí)行的

shuffle是MR處理流程中的一個(gè)過程,它的每一個(gè)處理步驟是分散在各個(gè)map task和reduce task節(jié)點(diǎn)上完成的,整體來看,分為3個(gè)操作:

  • 分區(qū)partition

  • Sort根據(jù)key排序

  • Combiner進(jìn)行局部value的合并


具體來說就是將maptask輸出的處理結(jié)果數(shù)據(jù),分發(fā)給reducetask,并在分發(fā)的過程中,對(duì)數(shù)據(jù)按key進(jìn)行了分區(qū)和排序;




3詳細(xì)流程



MapReduce是怎么執(zhí)行的

  1. maptask收集我們的map()方法輸出的kv對(duì),先進(jìn)入分區(qū)方法,把數(shù)據(jù)標(biāo)記好分區(qū),然后把數(shù)據(jù)發(fā)送到內(nèi)存緩沖區(qū)(默認(rèn)100M)中

  2. 當(dāng)環(huán)形緩沖區(qū)達(dá)到80%時(shí),進(jìn)行溢寫,從內(nèi)存緩沖區(qū)不斷溢出本地磁盤文件,可能會(huì)溢出多個(gè)文件 (溢寫前對(duì)數(shù)據(jù)進(jìn)行快速排序,排序按照key的索引進(jìn)行字典順序排序)

  3. 多個(gè)溢出文件會(huì)被合并成大的溢出文件(歸并排序算法),對(duì)溢寫的文件也可以進(jìn)行combiner操作,前提是匯總操作,求平均值不行。

  4. 在溢出過程中,及合并的過程中,都要調(diào)用partitoner進(jìn)行分組和針對(duì)key進(jìn)行排序

  5. reducetask根據(jù)自己的分區(qū)號(hào),去各個(gè)maptask機(jī)器上取相應(yīng)的結(jié)果分區(qū)數(shù)據(jù),拉取的數(shù)據(jù)先存儲(chǔ)在內(nèi)存中,內(nèi)存不夠了,再存儲(chǔ)到磁盤。

  6. reducetask會(huì)取到同一個(gè)分區(qū)的來自不同maptask的結(jié)果文件,reducetask會(huì)將這些文件再進(jìn)行合并(歸并排序)

  7. 合并成大文件后,shuffle的過程也就結(jié)束了,后面進(jìn)入reducetask的邏輯運(yùn)算過程(從文件中取出一個(gè)一個(gè)的鍵值對(duì)group,調(diào)用用戶自定義的reduce()方法)

Shuffle中的緩沖區(qū)大小會(huì)影響到mapreduce程序的執(zhí)行效率,原則上說,緩沖區(qū)越大,磁盤io的次數(shù)越少,執(zhí)行速度就越快

緩沖區(qū)的大小可以通過參數(shù)調(diào)整,  參數(shù):io.sort.mb  默認(rèn)100M

上述就是小編為大家分享的MapReduce是怎么執(zhí)行的了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI