1. 程式人生 > >關於MapReduce詳細工作流程,你真的都知道嗎??

關於MapReduce詳細工作流程,你真的都知道嗎??

毫無疑問,Hadoop 裡面最複雜的是MapReduce,那麼今天咱們就來看看它的整體工作流程:
在這裡插入圖片描述
在這裡插入圖片描述

怎麼樣?是不是懵了?
簡單說下我的理解:
上面的流程是整個 mapreduce 最全工作流程,但是 shuffle 過程只是從第 7 步開始到第16 步結束,具體 shuffle 過程詳解,如下:

1. maptask收集我們的 map()方法輸出的 kv對,放到記憶體緩衝區中
2. 從記憶體緩衝區不斷溢位本地磁碟檔案,可能會溢位多個檔案
3. 多個溢位檔案會被合併成大的溢位檔案
4. 在溢位過程中,及合併的過程中,都要呼叫 partitioner進行分割槽和針對 key進行排序 
5. reducetask根據自己的分割槽號,去各個 maptask機器上取相應的結果分割槽資料
6. reducetask會取到同一個分割槽的來自不同 maptask的結果檔案,reducetask會將這些檔案再進行合併(歸併排序)
7. 合併成大檔案後,shuffle的過程也就結束了,後面進入 reducetask的邏輯運算過程 (從檔案中取出一個一個的鍵值對 group,呼叫使用者自定義的reduce()方法)

好了,就這麼多了,如果發現錯誤,歡迎指正呦!