數(shù)據(jù)產(chǎn)品經(jīng)理有必要了解的MapReduce

? ? ? ?本文是Hadoop組件之MapReduce的學習總結(jié)性文章。因本人非技術(shù)出身聋袋,所學均來源于網(wǎng)絡(luò)妖滔,難免有不嚴謹甚至錯誤之處,懇請大家指正氢惋。

? ? ? ?我們借用本系列第一篇文章內(nèi)舉的關(guān)于MapReduce的小例子來開始本次分享洞翩。

張三接到一個統(tǒng)計去年全年購買過“匯源腎寶”的用戶所處年齡段的任務(wù)。
? ? ? ?假設(shè)當時他是這樣做的:寫了一個程序焰望,先遍歷去年的數(shù)據(jù)文件骚亿,然后找到在去年所有購買過“匯源腎寶”的用戶,并且記錄下他們的年齡柿估,最后把符合各年齡段的用戶數(shù)進行匯總統(tǒng)計循未,就可以得到各個年齡段的用戶數(shù)的個數(shù)。但是這種方法比較耗時秫舌,畢竟就一個程序在執(zhí)行這個任務(wù)的妖。當然他也可以編寫一個多線程程序,并發(fā)的去執(zhí)行這個任務(wù)足陨,這種方法肯定比前面提到的方法效率高嫂粟,但是寫一個多線程程序要困難的多,不僅需要同步共享數(shù)據(jù)墨缘,還要防止兩個線程重復(fù)統(tǒng)計星虹,這對于張三來說肯定是一個有難度、并且工作量大的任務(wù)镊讼。
? ? ? ?但是在hadoop框架下宽涌,可以使用MapReduce來執(zhí)行這個任務(wù)就容易的多,大致過程為:數(shù)據(jù)文件被分成若干部分存在HDFS上(分布在不同的計算機中)蝶棋,然后每一臺計算機執(zhí)行一個MapReduce去計算他保存的這部分數(shù)據(jù)卸亮,找出去年購買過“匯源腎寶”的用戶,并且把他們的年齡記錄下來玩裙。比如計算機A統(tǒng)計完他的數(shù)據(jù)后兼贸,20歲的用戶數(shù)有20個、30歲的用戶數(shù)有30個吃溅,計算機B統(tǒng)計完他的數(shù)據(jù)后溶诞,20歲的用戶數(shù)有22個、30歲的用戶數(shù)有30個决侈、33歲的用戶數(shù)有60個......螺垢,這個階段可以簡單的理解為map階段。然后把所有的計算機統(tǒng)計的數(shù)據(jù)進行匯總就可以得到所有年齡的用戶數(shù)分別是多少個赖歌,假設(shè)最后匯總結(jié)果為枉圃,20歲 :1000個、30歲 :700個俏站、33歲 :1200個讯蒲,那么這個階段可以簡單的理解為reduce階段。在整個過程中張三只需要實現(xiàn)Map和Reduce這兩個函數(shù)(即按照什么鍵值對去統(tǒng)計肄扎、匯總)墨林,不用去管數(shù)據(jù)文件如何切分、統(tǒng)計不重復(fù)犯祠、匯總不遺漏等等旭等。所以這種分布式運算的方式肯定比原來的更快,而且由于底層的技術(shù)實現(xiàn)封裝衡载,又保證了分布式運算的準確性搔耕、便利性。

什么是MapReduce?

? ? ? ?MapReduce是一個分布式計算框架弃榨,作為產(chǎn)品人員我覺得也可以簡單粗暴的理解為他就是用于計算HDFS上數(shù)據(jù)文件的計算引擎菩收。即HDFS是存儲大數(shù)據(jù)的,MapReduce是進行大數(shù)據(jù)運算的鲸睛。
? ? ? ?既然是做計算的娜饵,那么就需要有數(shù)據(jù)輸入(input),經(jīng)過MapReduce運算后也會有個輸出(output)官辈,這個輸出就是我們所需要的結(jié)果箱舞。

一個完整的MapReduce計算任務(wù)主要有六個階段(我這樣劃分僅是為了更方便理解,當然相對嚴謹?shù)氖莍nput包含了split):
1.input階段獲取輸入數(shù)據(jù)
2.split階段對數(shù)據(jù)進行分片作為map的輸入
3.map階段過程對某種輸入格式的一條記錄解析成一條或多條記錄
4.shffle階段對中間數(shù)據(jù)的控制拳亿,作為reduce的輸入
5.reduce階段對相同key的數(shù)據(jù)進行合并
6.output階段按照格式輸出到指定目錄
整個運算任務(wù)一般只需要程序員定義好這map函數(shù)和reduce函數(shù)即可(前面也有提到)

接下來就用圖文的方式來講解下一個MapReduce任務(wù)的具體過程晴股,備注:本文僅針對MapReduce1.0做講解

MapReduce任務(wù)過程

? ? ? ?假設(shè)我們HDFS上存了一個如上圖所示的文件,這個文件中記錄了A公司去年里所有買了“匯源腎寶”的用戶的年齡肺魁。然后我們使用MapReduce來統(tǒng)計出各個年齡的人數(shù)电湘。
1.input階段:讀取文件數(shù)據(jù)。略微擴展下:Input是讀取數(shù)據(jù)的總接口,默認使用FileInputFomart類万搔,因為讀取的數(shù)據(jù)的類型不同(日志文件胡桨、二進制格式文件、數(shù)據(jù)庫表等等)瞬雹,所以FileInputFomart有多個實現(xiàn)類來處理不同類型的數(shù)據(jù)昧谊,甚至可以自定義實現(xiàn)類。
2.split階段將要處理的數(shù)據(jù)進行邏輯上的切片劃分酗捌,每一個切片(split)都對應(yīng)一個mapTast任務(wù)呢诬,也就是說,將數(shù)據(jù)切成幾片胖缤,就有幾個mapTast任務(wù)尚镰。心細的朋友也許會想到這里的切分與HDFS存儲數(shù)據(jù)文件時切分的Block有什么關(guān)系。那我也做個簡單的介紹哪廓,hadoop在默認的情況下狗唉,Split和Block的大小是一樣的(默認128M),這樣容易造成誤解認為兩者是一樣的涡真,但是其實他們是2個概念分俯,split是MapReduce里的概念,是切片的概念哆料,split是邏輯切片缸剪,它只包含一些元數(shù)據(jù)信息(數(shù)據(jù)起始位置、數(shù)據(jù)長度东亦、數(shù)據(jù)所在的節(jié)點等) 杏节;而block是hdfs中切塊的大小,block是物理切塊。默認情況下一個split對應(yīng)一個block奋渔,但是實際情況可能是一個split對應(yīng)多個block镊逝。有興趣的朋友可以去這里做詳細了解 Hadoop Block 與 InputSplit 的區(qū)別與聯(lián)系
3.map階段此階段卒稳,就是執(zhí)行mapTast任務(wù)的過程蹋半,可簡單粗暴的理解為運行多個程序(程序的數(shù)量與切片數(shù)相等他巨,且這個程序包含程序員所寫的map()函數(shù)充坑,這個函數(shù)的作用是獲取給定文件中一行數(shù)據(jù),對其分詞后染突,依次輸出用戶年齡)去讀取切片對應(yīng)的數(shù)據(jù)捻爷,然后輸出<20歲,1>份企、<30歲也榄,1>這樣的鍵值對。
4.shffle階段簡單的理解為分組吧(如果了解SQL的司志,可以類比成group by)甜紫,即將map的輸出經(jīng)過“整理”后給到reduce,分為map端操作和reduce端操作骂远,這個階段是不需要程序員來做什么的囚霸,里面的代碼邏輯已經(jīng)被大佬們封裝完畢。由于比較復(fù)雜激才,我個人也就沒有過多去了解了拓型。
5.reduce階段簡單的理解為對分組后的數(shù)據(jù)進行匯總(同樣可類比成分組后的 count)。當然這個階段也會運行程序員寫的reduce()函數(shù)瘸恼,他的作用是將相同的年齡聚集在一起劣挫,然后統(tǒng)計每個年齡出現(xiàn)的總次數(shù),得出<20歲东帅,1>压固、<30歲,1>靠闭、<33歲帐我,1>這樣的鍵值對。
6.output階段按照輸出文件的格式阎毅,將每個鍵值對作為結(jié)果輸出焚刚。

MapReduce 1.0架構(gòu)

MapReduce 1.0架構(gòu)圖

JobTracker是Map-Reduce框架中心(就像上一篇HDFS中NameNode一樣,把它看成指揮官)扇调,主要負責資源監(jiān)控和作業(yè)調(diào)度(管理哪些程序應(yīng)該跑在哪些些機器上)矿咕。JobTracker監(jiān)控所有TaskTracker與作業(yè)的健康狀況,一旦發(fā)現(xiàn)任務(wù)失敗情況,其會將相應(yīng)的任務(wù)轉(zhuǎn)移到其他機器上執(zhí)行碳柱;同時JobTracker會跟蹤任務(wù)的執(zhí)行進度捡絮、資源(主要就是IO、網(wǎng)絡(luò)莲镣、磁盤)使用量等福稳,并將這些信息告訴給任務(wù)調(diào)度器(Task Scheduler),而調(diào)度器會在資源出現(xiàn)空閑時瑞侮,選擇合適的任務(wù)使用這些資源的圆。
TaskTracker會周期性地將本節(jié)點上資源的使用情況和任務(wù)的運行進度匯報給JobTracker,同時接收JobTracker發(fā)送過來的命令并執(zhí)行相應(yīng)操作(如啟動新任務(wù)半火、殺死任務(wù)等)越妈。

最后做個總結(jié):

? ? ? ?MapReduce是一個分布式計算框架,具有易編程钮糖、高容錯性梅掠、高吞吐的特性。易編程主要是因為他提供了非常易用的編程接口店归,程序員只需要編寫幾個簡單的函數(shù)就可以實現(xiàn)分布式程序阎抒,而其他比較復(fù)雜的工作,比如節(jié)點間的通信消痛、節(jié)點失效且叁、數(shù)據(jù)切分等,全部由MapReduce運行環(huán)境完成肄满,程序員們不用關(guān)注這些谴古,只需把精力放在業(yè)務(wù)邏輯上即可。高容錯性主要是采取了計算遷移稠歉、數(shù)據(jù)遷移等策略提高集群的可用性與容錯性掰担。高吞吐率一個分布式系統(tǒng)通常需要在高吞吐率與低延遲之間做權(quán)衡,而MapReduce選擇了高吞吐率怒炸,即利用分布式并行技術(shù)带饱,使用多機資源,一次讀取/寫入數(shù)據(jù)阅羹。同時也造成了其效率比較低勺疼,所以它一般用于離線計算,而實時計算一般使用Spark捏鱼、Flink执庐。

傳送門
Hadoop系列文章(一)數(shù)據(jù)產(chǎn)品經(jīng)理有必要了解的Hadoop
Hadoop系列文章(二)數(shù)據(jù)產(chǎn)品經(jīng)理有必要了解的HDFS
Hadoop系列文章(四)數(shù)據(jù)產(chǎn)品經(jīng)理有必要了解的YARN

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市导梆,隨后出現(xiàn)的幾起案子轨淌,更是在濱河造成了極大的恐慌迂烁,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件递鹉,死亡現(xiàn)場離奇詭異盟步,居然都是意外死亡,警方通過查閱死者的電腦和手機躏结,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門却盘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人媳拴,你說我怎么就攤上這事黄橘∩馨海” “怎么了担扑?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我语婴,道長,這世上最難降的妖魔是什么驶睦? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任砰左,我火速辦了婚禮,結(jié)果婚禮上场航,老公的妹妹穿的比我還像新娘缠导。我一直安慰自己,他們只是感情好溉痢,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布僻造。 她就那樣靜靜地躺著,像睡著了一般孩饼。 火紅的嫁衣襯著肌膚如雪髓削。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天镀娶,我揣著相機與錄音立膛,去河邊找鬼。 笑死梯码,一個胖子當著我的面吹牛宝泵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播轩娶,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼儿奶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鳄抒?” 一聲冷哼從身側(cè)響起闯捎,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤搅窿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后隙券,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體男应,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年娱仔,在試婚紗的時候發(fā)現(xiàn)自己被綠了沐飘。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡牲迫,死狀恐怖耐朴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情盹憎,我是刑警寧澤筛峭,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站陪每,受9級特大地震影響影晓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜檩禾,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一挂签、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盼产,春花似錦饵婆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至灌灾,卻和暖如春搓译,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背紧卒。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工侥衬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人跑芳。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓轴总,卻偏偏與公主長得像,于是被迫代替她去往敵國和親博个。 傳聞我的和親對象是個殘疾皇子怀樟,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345