hadoop mapreduce作業流程概論


mapreduce的一個完整作業流程是怎么樣的呢,相信剛接觸hadoop,剛寫mapreduce的初學者都有很大的困擾,下面的圖來自http://horicky.blogspot.com/2008/11/hadoop-mapreduce-implementation.html,是我看到的講MapReduce最好的圖。

 

Hadoop帶的wordcount為例子(下面是啟動行):

 

hadoop jar hadoop-0.19.0-examples.jar wordcount /usr/input /usr/output

用戶提交一個任務以后,該任務由JobTracker協調,先執行Map階段(圖中M1,M2和M3),然后執行Reduce階段(圖中R1和R2)。

Map階段和Reduce階段動作都受到TaskTracker監控,並運行在獨立於TaskTracker的Java虛擬機中。

我們的輸入和輸出都是HDFS上的目錄(如上圖所示)。輸入由InputFormat接口描述,它的實現如ASCII文件,JDBC數據庫等,分別處理對於的數據源,並提供了數據的一些特征。通過InputFormat實現,可以獲取InputSplit接口的實現,這個實現用於對數據進行划分(圖中的splite1到splite5,就是划分以后的結果),同時從InputFormat也可以獲取RecordReader接口的實現,並從輸入中生成<k,v>對。有了<k,v>,就可以開始做map操作了。

map操作通過context.collect(最終通過OutputCollector. collect)將結果寫到context中。當Mapper的輸出被收集后,它們會被Partitioner類以指定的方式區分地寫出到輸出文件里。我們可以為Mapper提供Combiner,在Mapper輸出它的<k,v>時,鍵值對不會被馬上寫到輸出里,他們會被收集在list里(一個key值一個list),當寫入一定數量的鍵值對時,這部分緩沖會被Combiner中進行合並,然后再輸出到Partitioner中(圖中M1的黃顏色部分對應着Combiner和Partitioner)。

Map的動作做完以后,進入Reduce階段。這個階段分3個步驟:混洗(Shuffle),排序(sort)和reduce。

混洗階段,Hadoop的MapReduce框架會根據Map結果中的key,將相關的結果傳輸到某一個Reducer上(多個Mapper產生的同一個key的中間結果分布在不同的機器上,這一步結束后,他們傳輸都到了處理這個key的Reducer的機器上)。這個步驟中的文件傳輸使用了HTTP協議。

排序和混洗是一塊進行的,這個階段將來自不同Mapper具有相同key值的<key,value>對合並到一起。

Reduce階段,上面通過Shuffle和sort后得到的<key, (list="" of="" values)="">會送到Reducer. reduce方法中處理,輸出的結果通過OutputFormat,輸出到DFS中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM