- 優(yōu)點(diǎn)
- MapReduce 易于編程,僅僅實(shí)現(xiàn)一些簡(jiǎn)單的接口,就可以完成一個(gè)分布式程序。并且部署到廉價(jià)的服務(wù)器上。
- 良好的擴(kuò)展性,通過(guò)簡(jiǎn)單的增加服務(wù)器就可以增加它的運(yùn)算性能
- 高容錯(cuò)性,MapReduce設(shè)計(jì)的初衷就是為了程序能在在廉價(jià)的機(jī)器上運(yùn)行, 這就要求具有高容錯(cuò)性。一臺(tái)機(jī)器掛了,就把運(yùn)算任務(wù)轉(zhuǎn)移到另外一臺(tái)機(jī)器,不至于這個(gè)任務(wù)失敗,且不需要人工操作
- 適合pb級(jí)別的數(shù)據(jù)進(jìn)行離線處理,實(shí)現(xiàn)上千臺(tái)服務(wù)器并發(fā)工作,提供處理能力。
- 缺點(diǎn)
- 不擅長(zhǎng)實(shí)時(shí)計(jì)算
- 不擅長(zhǎng)流式計(jì)算,MapReduce的輸入數(shù)據(jù)是靜態(tài)的,提前準(zhǔn)備好的。
- 不擅長(zhǎng)DAG(有向圖)計(jì)算,多個(gè)程序存在依賴(lài)。每個(gè)MapReduce結(jié)果都會(huì)寫(xiě)入磁盤(pán),這樣做會(huì)導(dǎo)致大量磁盤(pán)IO,造成程序性能?chē)?yán)重降低。
- MapReduce編程核心思想
- MapReduce 一般分為兩個(gè)階段,Map(分)和Reduce(和)
- Map階段并發(fā)MapTask,安全并行運(yùn)行,互不干擾。
- Reduce階段的并發(fā)ReduceTask,完全互不相關(guān)。但是它們依賴(lài)上一階段的所有MapTask的運(yùn)行結(jié)果
- MapReduce編程只能又一個(gè)Map階段和Reduce階段。
- MapReduce進(jìn)程
- MrAppMaster:負(fù)責(zé)整個(gè)程序的過(guò)程調(diào)度及狀態(tài)協(xié)調(diào)
- MapTask
- ReduceTask
- MapReduce編程規(guī)范
Mapper階段
- 用戶自定義的Mapper要繼承自己的父類(lèi)
- Mapper的輸入數(shù)據(jù)是KV對(duì)的形式
- Mapper中的業(yè)務(wù)邏輯寫(xiě)在map()方法中
- mapper的輸出數(shù)據(jù)是KV對(duì)形式
- map()方法(Map進(jìn)程)對(duì)每一個(gè)KV對(duì)調(diào)用一次
Reducer階段
- 用戶自定義的Reducer要繼承自己的父類(lèi)
- Reducer的輸入類(lèi)型對(duì)應(yīng)Mapper的輸出類(lèi)型,也是kv
- Reducer的業(yè)務(wù)邏輯寫(xiě)在reduce()方法中
- ReduceTask進(jìn)程對(duì)每一組形同k的<k,v>組調(diào)用一次reduce()方法
- Driver階段
- 相當(dāng)于YARN集群的客戶端,用于我們整個(gè)程序到集群。