深入理解MapReduce原理

摘要:我們在《從串行到并行,從并行到分布式》中无切,對串行刹孔、并行啡省、并發(fā)和分布式進(jìn)行了區(qū)分,并引出了分布式計(jì)算框架MapReduce髓霞。在這篇文章中我們會對MapReduce(Hadoop 2.x的版本)的概念卦睹、執(zhí)行流程、工作原理進(jìn)行深入探討方库。

1. 概念

百度百科對MapReduce的定義感覺還是比較全面的:

MapReduce是面向大數(shù)據(jù)并行處理的計(jì)算模型结序、框架和平臺,它隱含了以下三層含義:
1)MapReduce是一個基于集群的高性能并行計(jì)算平臺纵潦。它允許用市場上普通的商用服務(wù)器構(gòu)成一個包含數(shù)十徐鹤、數(shù)百至數(shù)千個節(jié)點(diǎn)的分布和并行計(jì)算集群。
2)MapReduce是一個并行計(jì)算與運(yùn)行軟件框架邀层。它提供了一個龐大但設(shè)計(jì)精良的并行計(jì)算軟件框架返敬,能自動完成計(jì)算任務(wù)的并行化處理,自動劃分計(jì)算數(shù)據(jù)和計(jì)算任務(wù)寥院,在集群節(jié)點(diǎn)上自動分配和執(zhí)行任務(wù)以及收集計(jì)算結(jié)果劲赠,將數(shù)據(jù)分布存儲、數(shù)據(jù)通信秸谢、容錯處理等并行計(jì)算涉及到的很多系統(tǒng)底層的復(fù)雜細(xì)節(jié)交由系統(tǒng)負(fù)責(zé)處理经磅,大大減少了軟件開發(fā)人員的負(fù)擔(dān)。
3)MapReduce是一個并行程序設(shè)計(jì)模型與方法钮追。它借助于函數(shù)式程序設(shè)計(jì)語言Lisp的設(shè)計(jì)思想预厌,提供了一種簡便的并行程序設(shè)計(jì)方法,用Map和Reduce兩個函數(shù)編程實(shí)現(xiàn)基本的并行計(jì)算任務(wù)元媚,提供了抽象的操作和并行編程接口轧叽,以簡單方便地完成大規(guī)模數(shù)據(jù)的編程和計(jì)算處理苗沧。

用自己的話概況一下:

MapReduce是一個基于集群的計(jì)算平臺,是一個簡化分布式編程的計(jì)算框架炭晒,是一個將分布式計(jì)算抽象為Map和Reduce兩個階段的編程模型待逞。(這句話記住了是可以用來裝逼的)

2. 執(zhí)行流程

先上一張MapReduce程序的執(zhí)行流程圖,我們來好好欣賞一下网严。

MapReduce運(yùn)行原理

由圖我們可以看到识樱, MapReduce存在以下4個獨(dú)立的實(shí)體。
1. JobClient:運(yùn)行于client node震束,負(fù)責(zé)將MapReduce程序打成Jar包存儲到HDFS怜庸,并把Jar包的路徑提交到Jobtracker,由Jobtracker進(jìn)行任務(wù)的分配和監(jiān)控垢村。
2. JobTracker:運(yùn)行于name node割疾,負(fù)責(zé)接收J(rèn)obClient提交的Job,調(diào)度Job的每一個子task運(yùn)行于TaskTracker上嘉栓,并監(jiān)控它們宏榕,如果發(fā)現(xiàn)有失敗的task就重新運(yùn)行它。
3. TaskTracker:運(yùn)行于data node侵佃,負(fù)責(zé)主動與JobTracker通信麻昼,接收作業(yè),并直接執(zhí)行每一個任務(wù)馋辈。
4. HDFS:用來與其它實(shí)體間共享作業(yè)文件抚芦。


各實(shí)體間通過以下過程完成一次MapReduce作業(yè)。

  1. JobClient通過RPC協(xié)議向JobTracker請求一個新應(yīng)用的ID首有,用于MapReduce作業(yè)的ID
  1. JobTracker檢查作業(yè)的輸出說明燕垃。例如,如果沒有指定輸出目錄或目錄已存在井联,作業(yè)就不提交卜壕,錯誤拋回給JobClient,否則烙常,返回新的作業(yè)ID給JobClient
  1. JobClient將作業(yè)所需的資源(包括作業(yè)JAR文件轴捎、配置文件和計(jì)算所得得輸入分片)復(fù)制到以作業(yè)ID命名的HDFS文件夾中
  1. JobClient通過submitApplication()提交作業(yè)
  1. JobTracker收到調(diào)用它的submitApplication()消息后,進(jìn)行任務(wù)初始化
  1. JobTracker讀取HDFS上的要處理的文件蚕脏,開始計(jì)算輸入分片侦副,每一個分片對應(yīng)一個TaskTracker
  1. TaskTracker通過心跳機(jī)制領(lǐng)取任務(wù)(任務(wù)的描述信息)
  1. TaskTracker讀取HDFS上的作業(yè)資源(JAR包、配置文件等)
  1. TaskTracker啟動一個java child子進(jìn)程驼鞭,用來執(zhí)行具體的任務(wù)(MapperTask或ReducerTask)
  1. TaskTracker將Reduce結(jié)果寫入到HDFS當(dāng)中

3. 工作原理

MapReduce工作原理圖
Map任務(wù)處理
  1. 讀取HDFS中的文件秦驯。每一行解析成一個<k,v>。每一個鍵值對調(diào)用一次map函數(shù)
  1. 重寫map()挣棕,對第一步產(chǎn)生的<k,v>進(jìn)行處理译隘,轉(zhuǎn)換為新的<k,v>輸出
  1. 對輸出的key亲桥、value進(jìn)行分區(qū)
  1. 對不同分區(qū)的數(shù)據(jù),按照key進(jìn)行排序固耘、分組题篷。相同key的value放到一個集合中

5.(可選) 對分組后的數(shù)據(jù)進(jìn)行歸約

Reduce任務(wù)處理

多個map任務(wù)的輸出,按照不同的分區(qū)厅目,通過網(wǎng)絡(luò)復(fù)制到不同的reduce節(jié)點(diǎn)上

對多個map的輸出進(jìn)行合并番枚、排序。

重寫reduce函數(shù)實(shí)現(xiàn)自己的邏輯损敷,對輸入的key葫笼、value處理,轉(zhuǎn)換成新的key嗤锉、value輸出

把reduce的輸出保存到文件中

最后渔欢,請?jiān)试S我打波廣告墓塌,作者開了一個公眾號【大數(shù)據(jù)學(xué)堂】瘟忱,專門分享一些與大數(shù)據(jù)和人工智能等相關(guān)學(xué)習(xí)資料和面試經(jīng)驗(yàn),歡迎您來一起交流學(xué)習(xí)苫幢。


大數(shù)據(jù)學(xué)院二維碼
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末访诱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子韩肝,更是在濱河造成了極大的恐慌触菜,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哀峻,死亡現(xiàn)場離奇詭異涡相,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)剩蟀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進(jìn)店門催蝗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人育特,你說我怎么就攤上這事丙号。” “怎么了缰冤?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵犬缨,是天一觀的道長。 經(jīng)常有香客問我棉浸,道長怀薛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任迷郑,我火速辦了婚禮枝恋,結(jié)果婚禮上迂苛,老公的妹妹穿的比我還像新娘。我一直安慰自己鼓择,他們只是感情好三幻,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著呐能,像睡著了一般念搬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上摆出,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天朗徊,我揣著相機(jī)與錄音,去河邊找鬼偎漫。 笑死爷恳,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的象踊。 我是一名探鬼主播温亲,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼杯矩!你這毒婦竟也來了栈虚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤史隆,失蹤者是張志新(化名)和其女友劉穎魂务,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泌射,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡粘姜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了熔酷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片孤紧。...
    茶點(diǎn)故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖纯陨,靈堂內(nèi)的尸體忽然破棺而出坛芽,到底是詐尸還是另有隱情,我是刑警寧澤翼抠,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布咙轩,位于F島的核電站,受9級特大地震影響阴颖,放射性物質(zhì)發(fā)生泄漏活喊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一量愧、第九天 我趴在偏房一處隱蔽的房頂上張望钾菊。 院中可真熱鬧帅矗,春花似錦、人聲如沸煞烫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽滞详。三九已至凛俱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間料饥,已是汗流浹背蒲犬。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留岸啡,地道東北人原叮。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像巡蘸,于是被迫代替她去往敵國和親奋隶。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 我們知道MapReduce誕生與搜索鄰域赡若,主要解決的是海量數(shù)據(jù)處理擴(kuò)展性差的問題达布。 MapReduce是一種編程模...
    Tim在路上閱讀 33,704評論 0 14
  • MapReduce是一種編程模型团甲,用于大規(guī)模數(shù)據(jù)集(大于1TB)的并行運(yùn)算逾冬。MapReduce采用”分而治之”的思...
    激情的狼王閱讀 5,972評論 1 24
  • Hadoop是市面上使用最多的大數(shù)據(jù)分布式文件存儲系統(tǒng)和分布式處理系統(tǒng), 其中分為兩大塊分別是hdfs和MapRe...
    SnailFast閱讀 982評論 0 5
  • Hadoop MapReduce作業(yè)執(zhí)行流程 整個 Hadoop MapReduce 的作業(yè)執(zhí)行流程如圖 1 所示...
    一粒米_394c閱讀 547評論 0 0
  • 推薦指數(shù): 6.0 書籍主旨關(guān)鍵詞:特權(quán)、焦點(diǎn)躺苦、注意力身腻、語言聯(lián)想、情景聯(lián)想 觀點(diǎn): 1.統(tǒng)計(jì)學(xué)現(xiàn)在叫數(shù)據(jù)分析匹厘,社會...
    Jenaral閱讀 5,721評論 0 5