學(xué)AI,好工作 就找北大青鳥
關(guān)注小青 聽課做題,輕松學(xué)習(xí)
周一至周日
4000-9696-28

收藏,最簡單易懂的MapReduce使用講解

來源:北大青鳥總部 2023年06月15日 13:43

摘要: MapReduce包含Map操作、Reduce操作,Map操作是映射操作,它接受一個輸入,產(chǎn)生一個中間鍵值對的輸出。Reduce操作就是化簡,它接受一個鍵值,將這組值合并產(chǎn)生更小的值。

對于MapReduce相信大家并不陌生,它是大數(shù)據(jù)Hadoop家族中最重要的成員之一,是一個運(yùn)行在Hadoop平臺上的分布式計(jì)算框架,對于大數(shù)據(jù)這塊,大家總是覺得高深莫測,淺嘗輒止,今天我們就通俗易懂的給大家講講,讓大家真正的感受到MapReduce是什么?如何使用?在哪些場景下用?

我們先來一個簡單的Case,冬天來了,是吃火鍋的季節(jié)了,你買了肥牛、蘑菇、白菜、香菜、豆腐、鴨血、小蔥,一個個的處理干凈,裝在盤子里,火鍋底料一放,菜一下,香噴噴的火鍋就出來了。在這個吃火鍋的場景中,我們可以抽象一下,它包含兩部分:洗干凈菜,煮菜,換做MapReduce的語言,每洗干凈一個菜就是一個Map操作,將白菜Map一下,香菜Map一下,每煮一次火鍋就是一個Reduce操作。這意味著每煮一次火鍋就需要把洗干凈的菜都放進(jìn)來,也就是把所有Map操作的菜都處理一下。

MapReduce還是一個分布式計(jì)算框架,所謂分布式就是可以多個操作并行。你煮的火鍋實(shí)在太好吃了,在民意要求下,你開啟了火鍋店,做大做強(qiáng)又開啟了火鍋分店,這時候你需要多個人去洗菜,一個人負(fù)責(zé)洗白菜、一個人負(fù)責(zé)切肥牛、一個人負(fù)責(zé)切豆腐,當(dāng)所有的人都處理完了之后,就有了處理好的白菜、肥牛、豆腐,這些都是基于Map白菜、Map肥牛、Map豆腐的操作下進(jìn)行的,Reduce操作是基于Key來進(jìn)行,Key就是洗干凈的白菜、肥牛、豆腐,Reduce之后就是一桌又一桌的火鍋。

總結(jié)一下,MapReduce是包含兩部分,即Map操作、Reduce操作,Map操作就是映射操作,它接受一個輸入,產(chǎn)生一個中間鍵值對的輸出,MapReduce框架會把Map函數(shù)中參數(shù)的中間鍵值對里相同的鍵值傳給Reduce函數(shù)。Reduce操作就是化簡,它接受一個鍵值,將這組值合并產(chǎn)生更小的值。

今年的雙十一開始了,老板交給你一個任務(wù),統(tǒng)計(jì)下所有牛仔褲最受歡迎的top3。如果是小電商平臺,那很簡單,寫個程序獲取所有的牛仔褲,遍歷一下每條牛仔褲被購買的次數(shù),再做一個排序,就知道最受歡迎的牛仔褲了。但是當(dāng)我是一個中型電商平臺時,遍歷就會比較慢了,這時候可以寫一個多線程的程序,在多核機(jī)器上去運(yùn)行就行。當(dāng)我是一個大型電商平臺,比如淘寶、京東、拼多多,我們就可以把計(jì)算每個牛仔褲被買次數(shù)的作業(yè)分給多臺機(jī)器去計(jì)算,把總的銷售數(shù)據(jù)分成N份,每臺計(jì)算機(jī)計(jì)算1份,最后匯總起來倒序排即可。上述三種算法,其實(shí)我們也可以使用MapReduce來完成噢。

在MapReduce中,Map函數(shù)和Reduce函數(shù)都是由我們自己定義的,在統(tǒng)計(jì)牛仔褲的銷量top3場景中,我們定義map函數(shù)獲取每款牛仔褲,Reduce函數(shù)統(tǒng)計(jì)每款牛仔褲被購買的次數(shù)。在下圖中,Map函數(shù)接受的key是所有商品,值是取牛仔褲,每遇到一個牛仔褲就產(chǎn)生一個中間鍵值對<jeans,1>,不同牛仔褲是不同的鍵值對,比如bluejeans,yellowjeans。Map函數(shù)將鍵值相同的鍵值對都傳遞給reduce,reduce將每個鍵值對的value進(jìn)行累加,最后獲取到每條牛仔褲被購買的次數(shù),存儲在底層的分布式文件系統(tǒng)HDFS中,業(yè)務(wù)層可以通過接口獲取數(shù)據(jù),展現(xiàn)最熱銷的top3牛仔褲。





通過實(shí)例我們明白了MapReduce是個什么東東,我們可以再結(jié)合Google論文中的工作原理流程圖來進(jìn)行最后的梳理。

在流程圖中上層業(yè)務(wù)通過UserProgram連接MapReduce庫,將輸入文件分成M份,即圖中的spilt0、spilt1、spilt2、spilt3、spilt4...,在使用master節(jié)點(diǎn)給worker節(jié)點(diǎn)分配Map作業(yè),我們有M份文件就分配M個worker,被分配了Map作業(yè)的worker讀取對應(yīng)的數(shù)據(jù),生成中間鍵值對,存儲在內(nèi)存和磁盤中,Reduce函數(shù)也會根據(jù)作業(yè)數(shù)進(jìn)行分區(qū),如果有M個作業(yè),就分成M個區(qū),由Master節(jié)點(diǎn)把分區(qū)作業(yè)從磁盤中傳遞給到ReduceWorker節(jié)點(diǎn),Reduceworker節(jié)點(diǎn)獲取到所有的中間鍵值對之后,進(jìn)行排序處理,獲取每個相同中間鍵值對的值。當(dāng)所有的Map作業(yè)和Reduce作業(yè)都執(zhí)行完了之后,master節(jié)點(diǎn)喚醒userprogram獲取數(shù)據(jù)。





通過老板安排的簡簡單單的獲取最熱銷牛仔褲的任務(wù),我們從原理到實(shí)踐講解了MapReduce的使用。MapReduce它比較適合大型網(wǎng)站的數(shù)據(jù)統(tǒng)計(jì)、在海量數(shù)據(jù)中獲取某些有特征的數(shù)據(jù),但是不太適合實(shí)時計(jì)算,從它的輸入都是靜態(tài)數(shù)據(jù),計(jì)算過程,存儲是在HDFS都可以看到執(zhí)行任務(wù)相對耗時比較長。我們結(jié)合自己業(yè)務(wù)情況,使用在最合適的場景即可。


標(biāo)簽: mapreduce
熱門班型時間
人工智能就業(yè)班 即將爆滿
AI應(yīng)用線上班 即將爆滿
UI設(shè)計(jì)全能班 即將爆滿
數(shù)據(jù)分析綜合班 即將爆滿
軟件開發(fā)全能班 爆滿開班
網(wǎng)絡(luò)安全運(yùn)營班 爆滿開班
報名優(yōu)惠
免費(fèi)試聽
課程資料
官方微信
返回頂部
培訓(xùn)課程 熱門話題 站內(nèi)鏈接