源自Google的MapReduce計(jì)算模型娘摔。MapReduce是一種集群數(shù)據(jù)并行計(jì)算的編程模型瓷叫,它并不提供數(shù)據(jù)處理的工作谎砾,具體的任務(wù)還需編碼實(shí)現(xiàn)樟插,開發(fā)需要具備一門程序語(yǔ)言如:java韵洋、python、ruby等)黄锤。MapReduce編程模型有Map(映射)和Reduce(規(guī)約)兩個(gè)階段搪缨。
MapReduce分布式計(jì)算模型,分而自治的理念,兩層含義1).大而化小。2).異化而同秒拔《幢海可以應(yīng)對(duì)了大數(shù)據(jù)的數(shù)據(jù)量巨大(Valume)和數(shù)據(jù)種類多樣(Variety)挑戰(zhàn)借宵。
假設(shè)我們手上有很多復(fù)雜的數(shù)據(jù)惠窄,那么怎樣來(lái)處理呢武花?1.把數(shù)據(jù)分類凄吏,分類后的數(shù)據(jù)就不復(fù)雜了短纵,這就是異化為同带污。2.分割,分割就是把數(shù)據(jù)切分為小塊香到,這樣就可以并發(fā)或則批量處理了鱼冀,這既是大而化小。
MapReduce當(dāng)時(shí)作為Google的三大法寶之一悠就,在處理大數(shù)據(jù)上面巨大的優(yōu)勢(shì)千绪,那么MapReduce是怎樣實(shí)現(xiàn)這樣高效的呢?
1.MapReduce工作原理講解
MapReduce分為Map階段和Reduce階段梗脾,下面這個(gè)例子可以很好的解釋荸型。
假如我們要制作蘋果醬,通常我們先將蘋果切塊炸茧,放入攪拌機(jī)中進(jìn)行攪拌就制作出了我們的蘋果醬瑞妇。將MapReduce應(yīng)用到這個(gè)操作上。
Map(映射):將蘋果切碎梭冠,是作用在蘋果上的一個(gè)Map操作辕狰。所以Map一個(gè)蘋果,Map就會(huì)將蘋果切碎控漠。Map過(guò)程中可能出現(xiàn)蘋果壞掉的情況蔓倍,你只要將壞掉的蘋果扔掉即可,Map可以將壞掉的蘋果過(guò)濾掉盐捷,Map出來(lái)的數(shù)據(jù)就是好的沒(méi)有壞掉的蘋果偶翅。
Reduce(規(guī)約):你將蘋果放入攪拌機(jī)進(jìn)行攪拌得到蘋果醬。你在攪拌之前需要切好原料碉渡,所以Reduce一般是和Map在一起的倒堕,但是Map可以獨(dú)立存在。
當(dāng)蘋果醬推向市面獲得市場(chǎng)的認(rèn)可爆价,接到了大量的訂單。此時(shí)就需要雇傭很多人來(lái)切蘋果媳搪,購(gòu)買大量的攪拌機(jī)用來(lái)生產(chǎn)蘋果醬铭段。并行工作生產(chǎn)蘋果醬滿足訂單需求。同理MapReduce在計(jì)算資源不足的情況下可以增加計(jì)算單元秦爆,提高數(shù)據(jù)處理能力序愚,滿足業(yè)務(wù)需求。
MapReduce是一款強(qiáng)大的分布式的計(jì)算框架等限。分布式計(jì)算的原理就是分而自治爸吮,假如我們需要統(tǒng)計(jì)出一大摞牌中紅桃牌的數(shù)量芬膝,最快速的方法就是給在座的每一位分一摞紙牌進(jìn)行統(tǒng)計(jì),然后他們將統(tǒng)計(jì)結(jié)果匯報(bào)到我這里來(lái)進(jìn)行匯總得到結(jié)論形娇。分布式計(jì)算一方面是將結(jié)果化繁為簡(jiǎn)锰霜,比如這個(gè)例子中每一位成員不會(huì)將紅桃的紙牌傳給我而只是化簡(jiǎn)為一個(gè)統(tǒng)計(jì)數(shù)值。另外有一個(gè)隱含之意就是牌需要分配均勻桐早,這一摞撲克牌預(yù)先是被充分洗過(guò)癣缅,就可以避免如果紅桃集中分配到某一個(gè)人手上,而導(dǎo)致他的速度要比其他人慢很多哄酝。
2.錯(cuò)誤處理
MapReduce有3類錯(cuò)誤如下:
1).JobTracker錯(cuò)誤友存,應(yīng)該說(shuō)是最嚴(yán)重的一種錯(cuò)誤,任務(wù)完全無(wú)法在集群上執(zhí)行陶衅。盡管這種錯(cuò)誤發(fā)生概率極小但是還是可以避免屡立。啟動(dòng)多個(gè)JobTracker,通過(guò)選舉機(jī)制確定那一個(gè)是主JobTracker搀军,主JobTracker負(fù)責(zé)任務(wù)的執(zhí)行膨俐,如果主JobTracker發(fā)生錯(cuò)誤,其等待的JobTracker通過(guò)選舉機(jī)制產(chǎn)生一個(gè)新的主JobTracker重新執(zhí)行任務(wù)奕巍。
2).TaskTracker錯(cuò)誤吟策,TaskTracker通過(guò)心跳機(jī)制不斷的與JobTracker通信,如果某一個(gè)TaskTracker停止或很少向JobTracker發(fā)送心跳的止,JobTracker會(huì)監(jiān)控TaskTracker發(fā)送心跳的情況檩坚,從而將此TaskTracker從等待任務(wù)調(diào)度池中移除。此TaskTracker將不會(huì)執(zhí)行集群的任務(wù)诅福,直到此TaskTracker節(jié)點(diǎn)的故障排除匾委。
3).子任務(wù)失敗,TaskTracker將子任務(wù)的執(zhí)行情況發(fā)送給JobTracker氓润,如果子任務(wù)執(zhí)行失敗赂乐,JobTracker將重新加入到調(diào)度隊(duì)列中重新分配給其他的TaskTracker執(zhí)行,如果嘗試4次任務(wù)仍然沒(méi)有完成咖气,此時(shí)整個(gè)作業(yè)就失敗了挨措。
這三類錯(cuò)誤的嚴(yán)重程度,JobTracker錯(cuò)誤>TaskTracker錯(cuò)誤>子任務(wù)(Task)錯(cuò)誤崩溪。
3.作業(yè)調(diào)度
MapReduce為用戶提供了以下三種作業(yè)調(diào)度機(jī)制浅役,用戶可以按照自己的需求任意選擇調(diào)度算法。
1).先入先出FIFO(First in First out)伶唯,它先按照作業(yè)的優(yōu)先級(jí)高低觉既,再按照到達(dá)時(shí)間的先后選擇被執(zhí)行的作業(yè)
2).公平調(diào)度器,每一個(gè)任務(wù)都會(huì)被分配相等的時(shí)間處理任務(wù)。
3).容量調(diào)度器瞪讼,該調(diào)度器會(huì)對(duì)同一用戶提交的作業(yè)所占資源量進(jìn)行限定钧椰,比如限定每一個(gè)作業(yè)只能占用1G的內(nèi)存,如果整個(gè)內(nèi)存有10G可以允許10個(gè)任務(wù)被加載到內(nèi)存中執(zhí)行符欠。
MapReduce的作業(yè)調(diào)度并沒(méi)有很高的實(shí)時(shí)性的要求嫡霞,它是本著最大吞吐的原則去設(shè)計(jì)的,所以MapReduce默認(rèn)采用的調(diào)度策略是FIFO(First in First out先進(jìn)先出的原則)背亥。
4.Shuffle與排序
Shuffle過(guò)程是MapReduce的核心秒际,也被稱為奇跡發(fā)生的地方。要想理解MapReduce狡汉,Shuffle是必須要了解的娄徊。從最基本的要求來(lái)說(shuō),我們對(duì)Shuffle過(guò)程的期望可以有:
1).完整地從map端拉取數(shù)據(jù)到reduce端盾戴。
2).在跨節(jié)點(diǎn)拉取數(shù)據(jù)時(shí)寄锐,盡可能地減少對(duì)帶寬的不必要消耗。
3).減少磁盤IO對(duì)task執(zhí)行的影響尖啡。
洗牌和排序非常消耗集群資源橄仆,Shuffle階段在Map階段和Reduce階段之間。Shuffle階段并不是簡(jiǎn)單的將Map端結(jié)果直接發(fā)送給Reduce端衅斩,因?yàn)镾huffle階段的好壞直接影響整個(gè)MapReduce的性能盆顾。在實(shí)際情況下我們?cè)趫?zhí)行任務(wù)可能是10個(gè)Map的節(jié)點(diǎn),卻只有2個(gè)Reduce節(jié)點(diǎn)畏梆,Reduce過(guò)程會(huì)出現(xiàn)大量數(shù)據(jù)通過(guò)集群網(wǎng)絡(luò)進(jìn)行傳輸您宪,同理Reduce階段中占據(jù)大量時(shí)間也是數(shù)據(jù)拉取耗時(shí),較好Shuffle過(guò)程就需要將Map結(jié)果數(shù)據(jù)放到Reduce很容易得到的服務(wù)器上面奠涌。
Shuffle是一個(gè)非常復(fù)雜的過(guò)程宪巨,我這里只是簡(jiǎn)單的進(jìn)行了講解,有興趣可以去深入理解溜畅。
小結(jié)
MapReduce作為Hadoop主要的核心內(nèi)容捏卓,在數(shù)據(jù)處理方面為我們提供了方法。通過(guò)對(duì)原理慈格、錯(cuò)誤怠晴、作業(yè)調(diào)度和Shuffle的閱讀我們能夠清晰的理解MapReduce。
MapReduce在大數(shù)據(jù)中解決數(shù)據(jù)計(jì)算處理問(wèn)題浴捆,但是MapReduce是Hadoop最早出現(xiàn)的技術(shù)蒜田,在Hadoop生態(tài)圈成長(zhǎng)的過(guò)程中已有很多更好的替代方案,我們將下一回分享汤功。