Hadoop的MapReduce執行流程圖


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

MapReduce執行流程

wKioL1nNvMyBZptWAAFI-FHS8b8949.png-wh_50


輸入和拆分:


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


    分片(split)操作:


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


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

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


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


    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-開頭。

  歡迎補充。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章