MepReduce背景
- 來源于google的mepreduce克隆版
mepreduce的特點(diǎn)
- 易于編程
- 良好的擴(kuò)展性
- 高容錯(cuò)性
- 適合pb級(jí)以上的海量數(shù)據(jù)的離線處理
mepreduce應(yīng)用場(chǎng)景
- 簡(jiǎn)單的搜索統(tǒng)計(jì)
- 搜索引擎建立索引(mepreduce的初衷)
- 海量數(shù)據(jù)的查找
- 復(fù)雜數(shù)據(jù)的算法分析(聚類算法订晌、分類算法虏辫、推薦算法、圖算法等)
mepreduce的缺點(diǎn)
- 實(shí)時(shí)計(jì)算
- 流式計(jì)算
- DAG計(jì)算
多個(gè)應(yīng)用程序存在依賴關(guān)系锈拨,后一個(gè)應(yīng)用程序的輸入為前一個(gè)應(yīng)用程序的輸出
mepreduce的編程模型(基于wordcount)
image.png
- input
輸入一大部分文件,什么都有 - splitting
分片砌庄,任務(wù)是把一堆任務(wù)切成小文件
大任務(wù)切成小任務(wù)
輸入是一堆小文件 - mapping
splitting的小文件每片都交給一個(gè)map來處理
輸入是一個(gè)key-value的鍵值對(duì) - shuffling(混洗)
1、對(duì)map后的數(shù)據(jù)進(jìn)行混洗
2奕枢、對(duì)相同的key進(jìn)行合并(把key相同的發(fā)送給同一個(gè)節(jié)點(diǎn))
3娄昆、混洗的依據(jù)是key的哈希對(duì)reduce的個(gè)數(shù)的模
4、取完模后還會(huì)進(jìn)行排序(排序后會(huì)使相同的key集中起來缝彬,這樣以便后續(xù)操作) - reducer
對(duì)key的value進(jìn)行統(tǒng)計(jì)萌焰,就可以輸出結(jié)果了
reducer的數(shù)量用戶自定義 - result
結(jié)果輸出
mepreduce的作業(yè)運(yùn)行流程-wordcount
mapreduce將作業(yè)的整個(gè)運(yùn)行過程分為兩個(gè)階段
- map階段
map階段由一定數(shù)量的map task組成(一個(gè)map task可以理解為一個(gè)進(jìn)程)
1、inputFormat(用戶指定)
2谷浅、mapper(用戶指定邏輯)
3扒俯、partition(用戶指定) - reduce階段
1、數(shù)據(jù)遠(yuǎn)程拷貝
2一疯、數(shù)據(jù)按照key排序
3撼玄、數(shù)據(jù)處理(用戶指定)
4、數(shù)據(jù)輸出格式(用戶指定)
不過map和reduce用戶指定 其他的mepreduce有默認(rèn)設(shè)置墩邀,可以自己去自定義
mepeduce的編程模型(數(shù)據(jù)流向)
image.png
- hdfs上的數(shù)據(jù)根據(jù)block為一個(gè)塊
- 每個(gè)split的數(shù)據(jù)塊交由mapper來處理
- partition 負(fù)責(zé)將每個(gè)mapper的結(jié)果輸出到各自的reduce中掌猛,partition根據(jù)key的hash取reduce數(shù)量的模來計(jì)算,patition進(jìn)行分片分開執(zhí)行并輸出本地磁盤眉睹,mapper可能在不同的機(jī)器上執(zhí)行留潦,數(shù)據(jù)輸出在本地磁盤,partition還會(huì)進(jìn)行排序(歸并排序)辣往,mapper階段完成
- 接下里就是reduce階段兔院,
- reduce開始就先去取各個(gè)mapper上的數(shù)據(jù),對(duì)mapper完成后的partition的數(shù)據(jù)進(jìn)行拉日鞠鳌(比如一個(gè)mapper機(jī)器上同時(shí)有好幾個(gè)partition執(zhí)行的分片坊萝,reduce1只要編號(hào)為1的分片)--其實(shí)這就是shuffle混洗過程
- 接下來就開始shuffle排序過程
- 接下來就是output輸出
- 結(jié)束
mepreduce 優(yōu)化
- combiner
1、其實(shí)可以發(fā)現(xiàn)在mapper階段也是可以進(jìn)行排序來優(yōu)化的,在mapper輸出的時(shí)候進(jìn)行一個(gè)局部合并(這個(gè)過程稱為combiner,通常和reduce的過程是一樣的)
2十偶、合并之后菩鲜,mapper端的數(shù)據(jù)量減少,處理起來就會(huì)變快
3惦积、注意combiner的邏輯的可執(zhí)行型接校,比如求平均值就不能用,用個(gè)數(shù)之和就能使用 - paritioner
1狮崩、parititioner決定了mapper的結(jié)果由哪一個(gè)reduce處理
2蛛勉、這個(gè)分區(qū)的過程可以自己處理(根據(jù)ip,域名都是可以的)
mepreduce的架構(gòu)(在yarn基礎(chǔ)上)
image.png
過程:
1、client向yarn提交mepreduce任務(wù)(直接指向的是resourceManager)
2睦柴、resourceManage找一臺(tái)空閑的nodeManager,
3诽凌、在這臺(tái)nodeMenage來啟動(dòng)appMaster
4、appMaster會(huì)向resourceManage申請(qǐng)資源
5坦敌、appMaster申請(qǐng)到資源后會(huì)向nodeManager分配任務(wù)侣诵,并啟動(dòng)起來
存在問題:
- appMaster失敗
如果appMaster出現(xiàn)失敗,yarn的resourceManage會(huì)自動(dòng)重新啟動(dòng)狱窘,啟動(dòng)幾次(由用戶指定)如果還是失敗杜顺,則作業(yè)啟動(dòng)失敗 - map或者reduce失敗
task周期性的向appMaster定時(shí)心跳,一旦掛掉蘸炸,就會(huì)重啟躬络,重啟固定次數(shù)后還是怪調(diào),就會(huì)重新申請(qǐng)資源