首頁技術(shù)文章正文

MapReduce編程模型:Map階段和Reduce階段

更新時(shí)間:2021-12-06 來源:黑馬程序員 瀏覽量:

MapReduce是一種編程模型,用于處理大規(guī)模數(shù)據(jù)集的并行運(yùn)算。使用MapReduce執(zhí)行計(jì)算任務(wù)的時(shí)候,每個(gè)任務(wù)的執(zhí)行過程都會(huì)被分為兩個(gè)階段,分別是Map和Reduce,其中Map階段用于對(duì)原始數(shù)據(jù)進(jìn)行處理,Reduce階段用于對(duì)Map階段的結(jié)果進(jìn)行匯總,得到最終結(jié)果,這兩個(gè)階段的模型如下圖所示。

MapReduce簡(jiǎn)單模型

MapReduce編程模型借鑒了函數(shù)式程序設(shè)計(jì)語言的設(shè)計(jì)思想,其程序?qū)崿F(xiàn)過程是通過map()和reduce()函數(shù)來完成的。從數(shù)據(jù)格式上來看,map()函數(shù)接收的數(shù)據(jù)格式是鍵值對(duì),產(chǎn)生的輸出結(jié)果也是鍵值對(duì)形式,reduce()函數(shù)會(huì)將map()函數(shù)輸出的鍵值對(duì)作為輸人,把相同key值的value進(jìn)行匯總,輸出新的鍵值對(duì)。接下來,通過一張圖來描述MapReduce的簡(jiǎn)易數(shù)據(jù)流模型,具體如下圖所示。

MapReduce簡(jiǎn)單數(shù)據(jù)流模型

對(duì)于上圖描述的MapReduce簡(jiǎn)易數(shù)據(jù)流模型說明如下:

(1)將原始數(shù)據(jù)處理成鍵值對(duì)形式。

(2)將解析后的鍵值對(duì)傳給map()函數(shù),map()函數(shù)會(huì)根據(jù)映射規(guī)則,將鍵值對(duì)映射為一系列中間結(jié)果形式的鍵值對(duì)。

(3)將中間形式的鍵值對(duì)形成形式傳給reduce()函數(shù)處理,把具有相同key的value合并在一起,產(chǎn)生新的鍵值對(duì),此時(shí)的鍵值對(duì)就是最終輸出的結(jié)果。

這里需要說明的是,對(duì)于某些任務(wù)來說,可能不一定需要Reduce過程,也就是說,MapReduce的數(shù)據(jù)流模型可能只有Map過程,由Map產(chǎn)生的數(shù)據(jù)直接被寫人HDFS中。但是,對(duì)于大多數(shù)任務(wù)來說,都是需要Reduce過程的,并且可能由于任務(wù)繁重,需要設(shè)定多個(gè)Reduce。例如,下面是一個(gè)具有多個(gè)Map和Reduce的MapReduce模型,具體如下圖所示。

多Map和Reduce的MapReduce模型

上圖中演示的是含有3個(gè)Map和2個(gè)Reduce的MapReduce程序,其中,由Map產(chǎn)生的相關(guān)key的輸出都會(huì)集中到Reduce中處理,而Reduce是最后的處理過程,其結(jié)果不會(huì)進(jìn)行第二次匯總。



猜你喜歡:

MapReduce編程開發(fā)實(shí)例——詞頻統(tǒng)計(jì)過程

MapReduce的工作流程是怎樣的?

MapReduce中Maper組件用法介紹

黑馬程序員python+大數(shù)據(jù)培訓(xùn)課程

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!