Hadoop的MapReduce執行流程圖


Hadoop的MapReduce shuffle過程,很是重要。只有熟悉整個過程才能對業務瞭如指掌。app

MapReduce執行流程框架

wKioL1nNvMyBZptWAAFI-FHS8b8949.png-wh_50


輸入和拆分:ide


    不屬於map和reduce的主要過程,但屬於整個計算框架消耗時間的一部分,該部分會爲正式的map準備數據。oop


    分片(split)操做:url


    split只是將源文件的內容分片造成一系列的 InputSplit,每一個 InputSpilt 中存儲着對 應分片的數據信息(例如,文件塊信息、起始位置、數據長度、所在節點列表…),並非將源文件分割成多個小文件,每一個InputSplit 都由一個 mapper 進行後續處理。spa


    每一個分片大小參數是很重要的,splitSize 是組成分片規則很重要的一個參數,該參數由三個值來肯定:orm

    minSize:splitSize 的最小值,由 mapred-site.xml 配置文件中 mapred.min.split.size 參數肯定。xml


    maxSize:splitSize 的最大值,由 mapred-site.xml 配置文件中mapreduce.jobtracker.split.metainfo.maxsize 參數肯定。blog


    blockSize:HDFS 中文件存儲的快大小,由 hdfs-site.xml 配置文件中 dfs.block.size 參數肯定。排序


    splitSize的肯定規則:splitSize=max{minSize,min{maxSize,blockSize}}


    數據格式化(Format)操做:


   將劃分好的 InputSplit 格式化成鍵值對形式的數據。其中 key 爲偏移量,value 是每一行的內容。


    值得注意的是,在map任務執行過程當中,會不停的執行數據格式化操做,每生成一個鍵值對就會將其傳入 map,進行處理。因此map和數據格式化操做並不存在先後時間差,而是同時進行的。


spacer.gif

    2)Map 映射:


    是 Hadoop 並行性質發揮的地方。根據用戶指定的map過程,MapReduce 嘗試在數據所在機器上執行該 map 程序。在 HDFS中,文件數據是被複制多份的,因此計算將會選擇擁有此數據的最空閒的節點。


    在這一部分,map內部具體實現過程,能夠由用戶自定義。


    3)Shuffle 派發:


    Shuffle 過程是指Mapper 產生的直接輸出結果,通過一系列的處理,成爲最終的 Reducer 直接輸入數據爲止的整個過程。這是mapreduce的核心過程。該過程能夠分爲兩個階段:


    Mapper 端的Shuffle:由 Mapper 產生的結果並不會直接寫入到磁盤中,而是先存儲在內存中,當內存中的數據量達到設定的閥值時,一次性寫入到本地磁盤中。並同時進行 sort(排序)、combine(合併)、partition(分片)等操做。其中,sort 是把 Mapper 產 生的結果按照 key 值進行排序;combine 是把key值相同的記錄進行合併;partition 是把 數據均衡的分配給 Reducer。


    Reducer 端的 Shuffle:因爲Mapper和Reducer每每不在同一個節點上運行,因此 Reducer 須要從多個節點上下載Mapper的結果數據,並對這些數據進行處理,而後才能被 Reducer處理。

   4)Reduce 縮減:

    Reducer 接收形式的數據流,造成形式的輸出,具體的過程能夠由用戶自定義,最終結果直接寫入hdfs。每一個reduce進程會對應一個輸出文件,名稱以part-開頭。

  歡迎補充。

相關文章
相關標籤/搜索