應(yīng)用場(chǎng)景
高容錯(cuò)
高擴(kuò)展
編程簡(jiǎn)單
適合大數(shù)據(jù)離線批量計(jì)算處理(注意,MB級(jí)別的數(shù)據(jù)直接用Java處理,PB級(jí)別以上的才有必要使用mapreduce)
有延遲(需要實(shí)時(shí)處理數(shù)據(jù)用Hbase或storm)
原理圖
image
map任務(wù)處理
讀取輸入文件內(nèi)容,解析成key,value對(duì)。對(duì)輸入文件的每一行,解析成key,value對(duì)。每一個(gè)鍵值對(duì)調(diào)用一次map函數(shù)
寫自己的邏輯,處理輸入的key,value,轉(zhuǎn)成新的key,value輸出
對(duì)輸出的key,value進(jìn)行分區(qū)
對(duì)不同分區(qū)的數(shù)據(jù),按照key進(jìn)行排序,分組。相同key的value放到一個(gè)集合中
分組后對(duì)數(shù)據(jù)進(jìn)行==歸約== (可選)
reduce任務(wù)處理
對(duì)多個(gè)map任務(wù)的輸出,按照不同的分區(qū),通過網(wǎng)絡(luò)copy到不同的reduce節(jié)點(diǎn)。
對(duì)多個(gè)map任務(wù)的輸出進(jìn)行合并,排序。寫reduce函數(shù)自己的邏輯,對(duì)輸入的key,value處理,轉(zhuǎn)換成新的key,value輸出。
把reduce的輸出保存到文件中。
map&reduce鍵值對(duì)格式
map函數(shù)
輸入鍵值對(duì)
輸出鍵值對(duì)
reduce()函數(shù)
輸入鍵值對(duì)
輸出鍵值對(duì)
mapreduceg過程各個(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é)果
作業(yè)提交流程
提交作業(yè)準(zhǔn)備
編寫自己的mapreduce程序
配置作業(yè),包括輸入輸出路徑等等
提交作業(yè)
配置完成后,通過jobclient提交
具體功能
與jobTracker通信得到一個(gè)jar的存儲(chǔ)路徑和JobId
輸入輸出路徑檢查,將jobjar拷貝到HDFS中
寫job.xml,真正提交作業(yè)
作業(yè)初始化
客戶端提交作業(yè)后,jobTracker會(huì)將作業(yè)加入到隊(duì)列中,然后進(jìn)行調(diào)度,默認(rèn)是FIFO的方式
具體功能
作業(yè)初始化主要是指JobInProgress中完成的
讀取分片信息
創(chuàng)建task:包括map和reduce任務(wù)
創(chuàng)建taskInProgress執(zhí)行task,包括map任務(wù)和reduce任務(wù)
任務(wù)分配
TashTracker和jobtracker之間的通信和任務(wù)分配是通過心跳機(jī)制實(shí)現(xiàn)的
tasktracker會(huì)主動(dòng)定期的想jobtracker發(fā)送報(bào)告,詢問是否有任務(wù)要做,如果有就申請(qǐng)到任務(wù);如果沒有任務(wù),就一直申請(qǐng)
任務(wù)執(zhí)行
當(dāng)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)Javachild進(jìn)行來執(zhí)行相應(yīng)的任務(wù)
錯(cuò)誤處理
JobTracker失敗
hadoop2.0之前存在單點(diǎn)故障問題
TraskTracker失敗
TraskTracker崩潰了會(huì)停止向JobTracker發(fā)送心跳信息
JobTracker會(huì)將TraskTracker從等待的任務(wù)池中移除,并將該任務(wù)轉(zhuǎn)移到其他地方執(zhí)行
JobTracker將TraskTracker加入到黑名單中s
Task失敗
任務(wù)失敗,會(huì)向TraskTracker拋出異常,任務(wù)掛起
牛逼啦:mapreduce詞頻統(tǒng)計(jì)的原理
HDFS中words文件內(nèi)容:
hello a
hello b
hello c
map處理

reduce處理
