MAP/REDUCE-shuffle流程簡單概述

在這裏插入圖片描述
我簡單地將shuffle流程分成以下兩部分:

map task
程序會根據InputFormat將輸入文件分割成splits,每個split會作爲一個map task的輸入,每個map task會有一個內存緩衝區,輸入數據經過map階段處理後的中間結果會寫入內存緩衝區(環形緩衝區,這個暫時就不深入了),並且決定數據寫入到哪個partitioner,當寫入的數據到達內存緩衝區的的閥值(默認是0.8),會啓動一個線程將內存中的數據溢寫入磁盤,同時不影響map中間結果繼續寫入緩衝區。在溢寫之前,MapReduce框架會對key進行分區排序,如果中間結果比較大,會形成多個溢寫文件(按區劃分),最後的緩衝區數據也會全部溢寫入磁盤形成一個溢寫文件(最少有一個溢寫文件),如果是多個溢寫文件,則最後合併所有的溢寫文件爲一個文件(依然按區劃分,伴隨有一次排序)。

reduce task
當所有的map task完成後,每個map task會形成一個最終文件,並且該文件按區劃分。reduce任務啓動之前,一個map task完成後,就會啓動線程來拉取map結果數據到相應的reduce task,不斷地合併數據,爲reduce的數據輸入做準備,當所有的map task完成後,數據也拉取合併完畢後,reduce task 啓動,最終將輸出輸出結果存入HDFS上。

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