MapReduce:分布式計算框架
MapReduce is a software framework for easily writing applications which process vast amounts of data (multi-terabyte data-sets) in-parallel on large clusters (thousands of nodes) of commodity hardware in a reliable, fault-tolerant manner.
Why MapReduce
如果想統(tǒng)計下過去10年計算機論文出現(xiàn)最多的幾個單詞捅厂,看看大家都在研究些什么藐窄,那收集好論文后夫否,該怎么辦呢帆谍?
方法一:單機執(zhí)行
方法二:多線程招行
方法三:多個計算機執(zhí)行
方法四:MapReduce計算框架執(zhí)行
相關(guān)組件:
JobClient : 提交相關(guān)mapreduce任務(wù)給JobTracker
JobTracker:任務(wù)控制中心
TaskTracker:任務(wù)執(zhí)行
整體流程
Map -> Combiner -> Shuffle -> Reduce
邏輯角度分析作業(yè)運行順序:輸入分片(input split)培己、map階段巡揍、combiner階段、shuffle階段老厌、reduce階段
map階段:即執(zhí)行map函數(shù)蚁袭。
Combiner階段:這是一個可選擇的函數(shù)乌叶,實質(zhì)上是一種reduce操作。combiner是map的后續(xù)操作讯私,主要是在map計算出中間文件前做一個簡單的合并重復key值的操作热押。
可以理解為在map任務(wù)在單機執(zhí)行完畢后,可單獨執(zhí)行combiner操作
Shuffle階段:map輸出到reduce輸入斤寇,包括:
? ? 1) map端的shuffle: 針對map輸出的key進行排序又叫sort階段桶癣。
? ? 2) reduce端的shuffle:復制數(shù)據(jù)和歸并數(shù)據(jù),最終產(chǎn)生一個有序的reduce輸入文件娘锁。
? ? ? Shuffle過程有許多可調(diào)優(yōu)的參數(shù)來提高MapReduce的性能牙寞,其總原則就是給shuffle過程盡量多的內(nèi)存空間。
Reduce階段:即執(zhí)行reduce函數(shù)并將結(jié)果存儲到hdfs文件系統(tǒng)中莫秆。
相關(guān)python streaming代碼示例