MapReduce 兩次統(tǒng)計(jì)樣例程序:解析大數(shù)據(jù)處理的關(guān)鍵步驟
一、MapReduce的魅力開場(chǎng)
MapReduce,這名字多霸氣,像不像超級(jí)英雄?在大數(shù)據(jù)的領(lǐng)域里,它就像是個(gè)無敵英雄,專門處理那些巨量又雜亂的數(shù)據(jù)集。比如,你有座巨型數(shù)據(jù)倉庫,擺滿各種類型的數(shù)據(jù),MapReduce就能化腐朽為神奇,把它們變成真金白銀。今天咱們就來看看,MapReduce是怎么用兩個(gè)簡(jiǎn)單的統(tǒng)計(jì)樣例程序展示它的超能力的。
首先得知道,MapReduce不只是個(gè)工具,它是解決難題的一種方法,把大問題拆分成小塊,一個(gè)個(gè)搞定。這樣一來,處理大數(shù)據(jù)就沒那么嚇人了,反倒挺有意思的。
二、Map階段:數(shù)據(jù)的初步探索
說到MapReduce,你得知道Map環(huán)節(jié)就是偵探的“開局”動(dòng)作!它接過大量的輸入數(shù)據(jù),逐個(gè)搞掂它們,制造出一堆看似普通卻很關(guān)鍵的中間結(jié)果。這些中間結(jié)果,就像用小本子記錄的現(xiàn)場(chǎng)證據(jù),雖然還不咋能看清楚真相,但對(duì)后面的破案可是大有幫助!
舉個(gè)例子假設(shè)要咱們統(tǒng)計(jì)社交網(wǎng)絡(luò)里的好友數(shù)量。在"映射"這個(gè)步驟中,咱們會(huì)逐行讀取數(shù)據(jù),每行都是倆好友的名字,比如"華仔,郭靖".然后,我們給每個(gè)好友組合起個(gè)名字,就是他們名字的順序(為了確保每組好友都獨(dú)一無二~),再給它配上一個(gè)數(shù)字1。這樣,原來那些亂糟糟的數(shù)據(jù)就變成了更容易理解和使用的中間結(jié)果!
三、Shuffle和Sort階段:線索的整理
map環(huán)節(jié)后,結(jié)果亂七八糟的,就像一地的線頭一樣煩人。然后shuffle+sort這倆大兄弟就幫咱們把相同鍵的結(jié)果擺放整齊,最后好讓reduce來清一清。
咱接著上回的例子,在shuffle和sort環(huán)節(jié)過后,所有叫"華仔,郭靖"的數(shù)據(jù)都聚堆兒。這時(shí)候咱們就可以進(jìn)行最后的大匯總!
四、Reduce階段:真相大白
Reducer階段,就是MapReduce流程通關(guān)的最后一個(gè)步驟,也是最關(guān)鍵的那一下子。這時(shí)候,Reduce函數(shù)把所有數(shù)據(jù)集中起來,把每個(gè)鍵對(duì)應(yīng)的數(shù)值搞清楚,然后咱們想要的結(jié)果就出來了。整個(gè)過程,就像大偵探破案,拿著那些線索,一點(diǎn)點(diǎn)推理出事實(shí)的真相。
咱們做好友對(duì)數(shù)統(tǒng)計(jì)時(shí),Reduce階段就是把每個(gè)鍵的數(shù)值加起來,最后算出總共的好友對(duì)數(shù)。這樣,任務(wù)就搞定!
五、另一個(gè)案例:?jiǎn)卧~頻率統(tǒng)計(jì)
比起好友對(duì)數(shù)統(tǒng)計(jì),你可能更想知道如何通過MapReduce來完成其他任務(wù),比如單詞頻率統(tǒng)計(jì)!它可是能幫我們計(jì)算出一段文本哪個(gè)詞兒最多,聽上去挺有意思~
在Map階段,就是把長(zhǎng)長(zhǎng)的文章切成一個(gè)個(gè)小詞,然后給每個(gè)小詞配上一個(gè)鍵值對(duì)。這個(gè)鍵很簡(jiǎn)單,就是小詞本身;至于值,就是數(shù)字“1”!這樣,原本的文本數(shù)據(jù)就變得像個(gè)半成品一樣~
shuffle跟sort這兩步,其實(shí)就是把所有相同的鍵值(也就是同一個(gè)單詞)給弄到一起去。然后,就可以準(zhǔn)備好開始reduce階段。
在Reduce階段,那個(gè)叫Reduce的函數(shù)就會(huì)給每個(gè)鍵算一下它對(duì)應(yīng)的值總共是多少次,最后就能得出所有單詞出現(xiàn)的總數(shù)!這樣子,咱們就把單詞出現(xiàn)頻數(shù)的活兒搞定了。
六、MapReduce的容錯(cuò)機(jī)制
MapReduce不只是個(gè)運(yùn)算神器還有超強(qiáng)的防出錯(cuò)功能!在Map環(huán)節(jié)里,大數(shù)據(jù)被切成小塊兒,每塊交給一個(gè)Map任務(wù)搞定。要是哪個(gè)任務(wù)掛了的話,對(duì)別的事情也沒影響!而且,MapReduce在傳數(shù)據(jù)的時(shí)候還會(huì)用上備份手法定時(shí)備份,保證數(shù)據(jù)安全無虞!
就算Reduction環(huán)節(jié)里有個(gè)工作失敗,我們依然可以重啟它,不影響最終效果!這個(gè)強(qiáng)大的防錯(cuò)功能保證了MapReduce處理大容量數(shù)據(jù)的穩(wěn)定性和可靠性。
七、MapReduce的適用場(chǎng)景
MapReduce很牛,但是有些時(shí)候用起來就不太劃算了。像要快速反饋或數(shù)據(jù)不多的情況下,可能用MapReduce就有點(diǎn)浪費(fèi)資源。還有那種經(jīng)常讀取寫入的任務(wù),試試別的模型,比如ApacheSpark,這個(gè)效率更高!
但如果你要處理大批量數(shù)據(jù)?那MapReduce絕對(duì)是最好的選擇!它通過分布式運(yùn)算,讓處理大數(shù)據(jù)就像切菜一樣輕松。
八、總結(jié)與展望
MapReduce是個(gè)牛逼的大數(shù)據(jù)處理工具,它讓大規(guī)模數(shù)據(jù)處理變得超快,特適合批處理那種大批量的數(shù)據(jù)。搞過兩次實(shí)驗(yàn)后,咱們才真正明白MapReduce怎么運(yùn)作而且在實(shí)際情況下能有多厲害。
以后,咱們的數(shù)據(jù)會(huì)越來越多,那時(shí)候,學(xué)點(diǎn)MapReduce和其他大數(shù)據(jù)處理工具就顯得尤為關(guān)鍵了。如果你是搞這行的,要好好理解并熟練運(yùn)用這些工具,這可是必不可少的技能!
關(guān)于這個(gè)話題,你們會(huì)不會(huì)經(jīng)常碰到需要整理很多數(shù)據(jù)的情況?那么你們都是怎么應(yīng)對(duì)這類麻煩事的?膜拜大神們分享你們的想法,讓我們互相理解,共同提高。
點(diǎn)贊轉(zhuǎn)發(fā)讓更多人領(lǐng)略MapReduce的魔力!
作者:小藍(lán)
鏈接:http://www.huanchou.cn/content/715.html
本站部分內(nèi)容和圖片來源網(wǎng)絡(luò),不代表本站觀點(diǎn),如有侵權(quán),可聯(lián)系我方刪除。