MapReduce那點(diǎn)事

一、概述

MapReduce是一種分布式計(jì)算模型,由兩個(gè)階段組成:Map和Reduce,用戶只需要實(shí)現(xiàn)map()和reduce()兩個(gè)函數(shù),即可實(shí)現(xiàn)分布式計(jì)算。

這兩個(gè)函數(shù)的形參是key、value對(duì),表示函數(shù)的輸入信息。

其中map(),輸入鍵值對(duì)<k1,v1>,輸出鍵值對(duì)<k2,v2>;

reduce(),輸入鍵值對(duì)<k2,{v2}>,輸出鍵值對(duì)<k3,v3>。


二、MapReduce原理

三、Map任務(wù)處理

1、讀取輸入文件內(nèi)容,解析成key、value對(duì)。對(duì)輸入文件的每一行,解析成 key、value對(duì)。每一個(gè)鍵值對(duì)調(diào)用一次map函數(shù)。

2 、寫自己的邏輯,處理輸入的key、value,轉(zhuǎn)換成新的key、value輸出。

3 、對(duì)輸出的key、value進(jìn)行分區(qū)。

4 、對(duì)不同分區(qū)的數(shù)據(jù),按照key進(jìn)行排序、分組。相同key的value放到一個(gè)集合中。

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


四、Reduce任務(wù)處理

1、對(duì)多個(gè)map任務(wù)的輸出,按照不同的分區(qū),通過網(wǎng)絡(luò)copy到不同的reduce節(jié)點(diǎn)。

2 、對(duì)多個(gè)map任務(wù)的輸出進(jìn)行合并、排序。寫reduce函數(shù)自己的邏輯,對(duì)輸入的key、value處理,轉(zhuǎn)換成新的key、value輸出。

3 、把reduce的輸出保存到HDFS文件中。


五、Map任務(wù)和Reduce任務(wù)舉例

假如我們要做一個(gè)詞頻統(tǒng)計(jì)的任務(wù),在HDFS中的words文件內(nèi)容

YSL 17

紀(jì)梵希 303

香奈兒 46

YSL 12

YSL 14


Map輸入這一步由MapReduce框架自動(dòng)完成,


Reduce輸入這一步由MapReduce框架自動(dòng)完成,



六、MapReduce流程分析

1、過程各個(gè)角色的作用

jobClient:提交作業(yè)

JobTracker:初始化作業(yè),分配作業(yè),TaskTracker與其進(jìn)行通信,協(xié)調(diào)監(jiān)控整個(gè)作業(yè)

TaskTracker:定期與JobTracker通信,執(zhí)行Map和Reduce任務(wù)

HDFS:保存作業(yè)的數(shù)據(jù)、配置、jar包、結(jié)果

2、作業(yè)提交流程

(1)提交作業(yè)準(zhǔn)備:編寫自己的MR程序; 配置作業(yè),包括輸入輸出路徑等等。

(2)提交作業(yè):配置完成后,通過JobClient提交。

(3)具體功能:與JobTracker通信得到一個(gè)jar的存儲(chǔ)路徑和JobId,輸入輸出路徑檢查、將jobj ar拷貝到的HDFS。


3、作業(yè)初始化

客戶端提交作業(yè)后,JobTracker會(huì)將作業(yè)加入到隊(duì)列,然后進(jìn)行調(diào)度,默認(rèn)是FIFO方式。

具體功能:作業(yè)初始化主要是指JobInProgress中完成的。

讀取分片信息。創(chuàng)建task包括Map和Reduce任創(chuàng)建task包括Map和Reduce任務(wù)。

創(chuàng)建TaskInProgress執(zhí)行task,包括map任務(wù)和reduce任務(wù)。


4、任務(wù)分配

TaskTracker與JobTracker之間的通信和任務(wù)分配是通過心跳機(jī)制實(shí)現(xiàn)的

TaskTracker會(huì)主動(dòng)定期向JobTracker發(fā)送報(bào)告,詢問是否有任務(wù)要做,如果有,就會(huì)申請(qǐng)到任務(wù)。


5、任務(wù)執(zhí)行

如果TaskTracker拿到任務(wù),會(huì)將所有信息拷貝到本地,包括代碼、配置、分片信息等。

TaskTracker中的localizeJob()方法會(huì)被調(diào)用進(jìn)行本地化,拷貝job.jar,jobconf,job.xml到本地。

TaskTracker調(diào)用launchTaskForJob()方法加載啟動(dòng)任務(wù)。

MapTaskRunner和ReduceTaskRunner分別啟動(dòng)java child進(jìn)程來執(zhí)行相應(yīng)的任務(wù)。


6、錯(cuò)誤處理

a、JobTracker失敗

存在單點(diǎn)故障,hadoop2.0解決了這個(gè)問題

b、TraskTracker失敗

TraskTracker崩潰了會(huì)停止向JobTracker發(fā)送心跳信息。

JobTracker會(huì)將TraskTracker從等待的任務(wù)池中移除,并將該任務(wù)轉(zhuǎn)移到其他的地方執(zhí)行

JobTracker將TaskTracker加入到黑名單中

c、Task失敗

任務(wù)失敗,會(huì)向TraskTracker拋出異常,最后任務(wù)掛起

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • MapReduce框架結(jié)構(gòu)## MapReduce是一個(gè)用于大規(guī)模數(shù)據(jù)處理的分布式計(jì)算模型MapReduce模型主...
    Bloo_m閱讀 3,799評(píng)論 0 4
  • MapReduce是一個(gè)數(shù)據(jù)處理的編程模型。這個(gè)模型很簡單,但也不是簡單到不能夠支持一些有用的語言。Hadoop能...
    單行線的旋律閱讀 1,541評(píng)論 0 2
  • 目的這篇教程從用戶的角度出發(fā),全面地介紹了Hadoop Map/Reduce框架的各個(gè)方面。先決條件請(qǐng)先確認(rèn)Had...
    SeanC52111閱讀 1,767評(píng)論 0 1
  • MapReduce是面向大數(shù)據(jù)并行處理的計(jì)算模型、框架和平臺(tái)。MapReduce是一個(gè)基于集群的高性能并行計(jì)算平臺(tái)...
    VVictoriaLee閱讀 436評(píng)論 0 1
  • 石參,姓孔,安徽人,60后,注冊(cè)會(huì)計(jì)師。 石參進(jìn)圍棋群很早,十多年了,是群里的高手之一,在弈城網(wǎng)上能升到8D,長期...
    天山客閱讀 535評(píng)論 0 0