MapReduce的构思和框架结构
MapReduce 設(shè)計(jì)構(gòu)思和框架結(jié)構(gòu)
MapReduce是一個(gè)分布式運(yùn)算程序的編程框架,核心功能是將用戶(hù)編寫(xiě)的業(yè)務(wù)邏輯代碼和自帶默認(rèn)組件整合成一個(gè)完整的分布式運(yùn)算程序,并發(fā)運(yùn)行在Hadoop集群上。
既然是做計(jì)算的框架,那么表現(xiàn)形式就是有個(gè)輸入(input),MapReduce操作這個(gè)輸入(input),通過(guò)本身定義好的計(jì)算模型,得到一個(gè)輸出(output)。
Hadoop MapReduce構(gòu)思:
分而治之
對(duì)相互間不具有計(jì)算依賴(lài)關(guān)系的大數(shù)據(jù),實(shí)現(xiàn)并行最自然的辦法就是采取分而治之的策略。并行計(jì)算的第一個(gè)重要問(wèn)題是如何劃分計(jì)算任務(wù)或者計(jì)算數(shù)據(jù)以便對(duì)劃分的子任務(wù)或數(shù)據(jù)塊同時(shí)進(jìn)行計(jì)算。不可分拆的計(jì)算任務(wù)或相互間有依賴(lài)關(guān)系的數(shù)據(jù)無(wú)法進(jìn)行并行計(jì)算!
統(tǒng)一構(gòu)架,隱藏系統(tǒng)層細(xì)節(jié)
如何提供統(tǒng)一的計(jì)算框架,如果沒(méi)有統(tǒng)一封裝底層細(xì)節(jié),那么程序員則需要考慮諸如數(shù)據(jù)存儲(chǔ)、劃分、分發(fā)、結(jié)果收集、錯(cuò)誤恢復(fù)等諸多細(xì)節(jié);為此,MapReduce設(shè)計(jì)并提供了統(tǒng)一的計(jì)算框架,為程序員隱藏了絕大多數(shù)系統(tǒng)層面的處理細(xì)節(jié)。
MapReduce最大的亮點(diǎn)在于通過(guò)抽象模型和計(jì)算框架把需要做什么(whatneed to do)與具體怎么做(how to do)分開(kāi)了,為程序員提供一個(gè)抽象和高層的編程接口和框架。程序員僅需要關(guān)心其應(yīng)用層的具體計(jì)算問(wèn)題,僅需編寫(xiě)少量的處理應(yīng)用本身計(jì)算問(wèn)題的程序代碼。如何具體完成這個(gè)并行計(jì)算任務(wù)所相關(guān)的諸多系統(tǒng)層細(xì)節(jié)被隱藏起來(lái),交給計(jì)算框架去處理:從分布代碼的執(zhí)行,到大到數(shù)千小到單個(gè)節(jié)點(diǎn)集群的自動(dòng)調(diào)度使用。
構(gòu)建抽象模型:Map和Reduce
MapReduce借鑒了函數(shù)式語(yǔ)言中的思想,用Map和Reduce兩個(gè)函數(shù)提供了高層的并行編程抽象模型
Map: 對(duì)一組數(shù)據(jù)元素進(jìn)行某種重復(fù)式的處理;
Reduce: 對(duì)Map的中間結(jié)果進(jìn)行某種進(jìn)一步的結(jié)果整理。
Map和Reduce為程序員提供了一個(gè)清晰的操作接口抽象描述。MapReduce處理的數(shù)據(jù)類(lèi)型是鍵值對(duì)。
MapReduce中定義了如下的Map和Reduce兩個(gè)抽象的編程接口,由用戶(hù)去編程實(shí)現(xiàn):
Map: (k1; v1) → [(k2; v2)]
Reduce: (k2; [v2]) → [(k3; v3)]
MapReduce 框架結(jié)構(gòu)
一個(gè)完整的mapreduce程序在分布式運(yùn)行時(shí)有三類(lèi)實(shí)例進(jìn)程:
1. MRAppMaster 負(fù)責(zé)整個(gè)程序的過(guò)程調(diào)度及狀態(tài)協(xié)調(diào)
2. MapTask 負(fù)責(zé)map階段的整個(gè)數(shù)據(jù)處理流程
3. ReduceTask 負(fù)責(zé)reduce階段的整個(gè)數(shù)據(jù)處理流程
?
超強(qiáng)干貨來(lái)襲 云風(fēng)專(zhuān)訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的MapReduce的构思和框架结构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: HDFS的API操作-小文件的合并
- 下一篇: MapReduce的编程规范