溫馨提示×

溫馨提示×

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

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

MapReduce計算框架指的是什么

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

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

1 MapReduce 是什么

先生說:"MapReduce是hadoop的一個計算框架,說直白點(diǎn)就是hdfs負(fù)責(zé)存儲,那么像其他統(tǒng)計、計算之類的事情就會交給MapReduce來做,分為map過程和reduce過程。

Map 過程是拆解,比如說有輛紅色的小汽車,有一群工人,把它拆成零件了,這就是Map"

MapReduce計算框架指的是什么  

Reduce 過程是組合,我們有很多汽車零件,還有很多其他各種裝置零件,把他們一陣拼裝,變成變形金剛,這就是Reduce。

MapReduce計算框架指的是什么  

小白聽了:"這么聽起來,感覺挺形象的,那么具體的map過程和reduce過程是如何。"

"且聽我慢慢給你講解",喵先生咽了咽口水。

 

2 MapReduce 的原理

先生說:"首先我們來看下面的數(shù)據(jù)————學(xué)生的信息記錄表"

MapReduce計算框架指的是什么  

1、我們可以過濾出性別為1的數(shù)據(jù);

2、可以將性別字段中1轉(zhuǎn)換成男且0轉(zhuǎn)換成女;

3、也可以將字段地址展開;

以上的過程就是map:以一條記錄為單位做映射(過濾/轉(zhuǎn)換/展開)

小白說:"我感覺map的原理跟mysql的語法好像啊,select * from student where sex=1,都是對數(shù)據(jù)進(jìn)行1條1條的處理."

先生:"嗯,孺子可教,我們來繼續(xù)看看reduce過程:我們想統(tǒng)計出學(xué)習(xí)各專業(yè)共有多少名同學(xué)時,需要將python、java、c進(jìn)行分組,以這樣的一組為單位進(jìn)行統(tǒng)計計算。"

MapReduce計算框架指的是什么  

以上的過程就是reduce:以組為單位進(jìn)行計算

小白說:"這不就是mysql 里面 group by的原理嘛,以組為單位進(jìn)行統(tǒng)計"

先生補(bǔ)充到:"思想跟mysql的group by思想類似的"

MapReduce計算框架指的是什么  

最后喵先生繼續(xù)總結(jié)到:" 輸入數(shù)據(jù)按照以一條數(shù)據(jù)為單位進(jìn)行映射(map方法),然后輸出kv鍵值對,以組為單位作為reduce的輸入進(jìn)行計算,最終輸出結(jié)果。"

好學(xué)的小白繼續(xù)問到:"嗯,我了解了mapreduce的大致過程,它如何從hdfs上取數(shù)據(jù)的呢,中間又是如何交互的呢"

先生:“不錯哦小白,看來你還挺上進(jìn)的,那咱們來看看mapreduce交互圖,mapreduce分為4步”

MapReduce計算框架指的是什么  

分為4步:

  1. map任務(wù)通過split在hdfs上取數(shù)據(jù),一個split對應(yīng)一個map方法并輸出key,value,partition格式數(shù)據(jù)
  2. map任務(wù)將取出的數(shù)據(jù)放到內(nèi)存中,并進(jìn)行分區(qū)、分組排序。
  3. reduce任務(wù)此時知道了 key所在的partition,到相應(yīng)的文件分區(qū)(dfs)上拉取數(shù)據(jù),并進(jìn)行計算最終輸出數(shù)據(jù)。

"為啥map不直接從hdfs上獲取數(shù)據(jù),中間非得用split獲取呢?"小白撓撓頭望著喵先生,

先生點(diǎn)點(diǎn)頭對小白說:"這個問題非常贊,split默認(rèn)大小等于hdfs上的一個block塊大約是64M,但可以通過調(diào)整split的大小來應(yīng)對不同的計算類型,

當(dāng)我們運(yùn)行CPU-bound(計算密集型),可以將split設(shè)置小一點(diǎn),多個split對應(yīng)1個block塊,這樣可以提高計算速度

MapReduce計算框架指的是什么  

當(dāng)我們運(yùn)行IO-bound(IO密集型),可以將split設(shè)置大一點(diǎn),1個split對應(yīng)N個block塊,這樣可以提高IO讀寫效率,

MapReduce計算框架指的是什么  

CPU-bound(計算密集型):

假設(shè)有一道數(shù)學(xué)題,題干只有一行字,
讀題花費(fèi)1秒,解題需要1個月才能解出來,
這樣就是CPU-bound。(CPU利用率幾乎100%)。
 

IO bound(IO密集型):

假設(shè)有一道數(shù)學(xué)題,題干有史記那么厚,
讀完花費(fèi)2個月,問題只是讓你回答1+1=?,
這樣就是I/O-bound。(CPU IDLE狀態(tài))。
 

小白總結(jié)到:“split原來可以控制map的并行度,決定了到底啟用多少個map任務(wù),一個split對一個map方法,輸出k,v,p鍵值對”

“這里為什么要將輸出的kv鍵值對放到內(nèi)存里呢,雖然內(nèi)存速度是硬盤的10萬倍,但最終數(shù)據(jù)不也會寫到磁盤上嗎,這不等于脫了褲子放屁嗎?”小白著急的問題,

“嗯,詞粗理不粗,這里放map輸出的kv鍵值對放100M的內(nèi)存中,還做了一件重要的事情————那就是對k,v,p數(shù)據(jù)進(jìn)行排序,將分區(qū)p下的數(shù)據(jù)放到一起,并且同一個分區(qū)下的k進(jìn)行了排序,方便后面的reduce是做 歸并排序?!毕壬忉尩?。

“你慢點(diǎn)呢,我都聽得懵了,舉個例子呢”

“那就看看下面的例子吧,統(tǒng)計java\python\mysql出現(xiàn)的次數(shù)”先生迅速的畫了一張圖

MapReduce計算框架指的是什么  

imput階段:hdfs的block塊上存有java、python、mysql的存儲文件位置

split階段:使用split對hdfs上的文件進(jìn)行切塊,其中文件分區(qū)0、2、3、15、16、17、205上存有java\python\mysql的信息,

map階段:將每個分區(qū)上的含有java\python\mysql信息的數(shù)據(jù)進(jìn)行kvp鍵值對輸出,例:java,1,0 代表0號分區(qū)下存有java信息1次

shuffle階段:在內(nèi)存中對同一組數(shù)據(jù)進(jìn)行排序,例:java出現(xiàn)在0、3、15、205分區(qū)上,

reduce階段:最終reduce任務(wù)根據(jù)shffle階段輸出的排序,到指定的的文件分區(qū)上獲取到對應(yīng)的文件。

“真神奇,看來內(nèi)存中的排序還真重要,有效減少了文件讀取的次數(shù),一次讀取多次取數(shù),對應(yīng)的處理速度也加快了”小白恍然大悟到。

"還有個問題,我看上面的例子中key的數(shù)量是3個(java\python\mysql)對應(yīng)的reduce的任務(wù)數(shù)也是3個,是不是key的數(shù)量就等于reduce的數(shù)量?"小白問道,

“觀察的挺仔細(xì)的呀,reduce的數(shù)量是由程序員代碼里面控制的,但key的數(shù)量也不完全等于reduce的數(shù)量,你想想萬一key有10萬個呢?那么reduce數(shù)量需要10萬個嗎?肯定沒那么多資源,所以一般是根據(jù)具體服務(wù)器資源中reduce執(zhí)行器的數(shù)量決定的。”先生補(bǔ)充到。

"另外還需要注意的是,如果key的數(shù)據(jù)量分布不均勻的話,可能會出現(xiàn)數(shù)據(jù)傾斜的問題,假如2個key————1個男,1個女,男數(shù)據(jù)量有10T,女的數(shù)據(jù)就只有1G,這樣的話進(jìn)行,系統(tǒng)遵循reduce處理同一個key時會將同一個key被分到同一個reduce執(zhí)行器下,那么這樣的話一個reduce執(zhí)行器就會處理10T的數(shù)據(jù),另一個reduce執(zhí)行器處理1G數(shù)據(jù),這就照成了數(shù)據(jù)傾斜。"先生繼續(xù)補(bǔ)充到。

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

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

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

AI