一般把資料從map階段輸出到reduce階段的過程叫shuffle,所以shuffle的作用範圍是map階段資料輸出到reduce階段資料輸入這一整個中間過程!
1)collect階段:
將maptask的結果輸出到預設大小為100m的環形緩衝區,儲存的是key/value序列化資料,partition分割槽資訊等。
2)spill溢位階段:
當記憶體中的資料量達到一定的閥值的時候,就會將資料寫入本地磁碟,
在將資料寫入磁碟之前需要對資料進行一次排序的操作,如果配置了combiner,還會將有相同分割槽號和key的資料進行排序。
3)merge階段:
把所有溢位的臨時檔案進行一次合併操作,以確保乙個maptask最終只產生乙個中間資料檔案。
4)copy階段:
reducetask啟動fetcher執行緒到已經完成maptask的節點上覆制乙份屬於自己的資料,
這些資料缺省會儲存在記憶體的緩衝區中,當記憶體的緩衝區達到一定的閥值的時候,就會將資料寫到磁碟之上。
5)merge階段:
在reducetask遠端複製資料的同時,會在後台開啟兩個執行緒
(乙個是記憶體到磁碟的合併,乙個是磁碟到磁碟的合併)對記憶體到本地的資料檔案進行合併操作。
6)sort階段:
在對資料進行合併的同時,會進行排序操作,由於maptask階段已經對資料進行了區域性的排序,
reducetask只需保證copy的資料的最終整體有效性即可
shuffle中的緩衝區大小會影響到 mapreduce 程式的執行效率,原則上說,緩衝區越大,磁碟io的次數越少,
執行速度就越快,正是因為shuffle的過程中要不斷的將檔案從磁碟寫入到記憶體,再從記憶體寫入到磁碟,
從而導致了hadoop中mapreduce執行效率相對於storm等一些實時計算來說比較低下的原因。
Hadoop學習日記(十三) Shuffle機制
2019.07.03 學習過程主要參考段海濤大資料p35 map任務與資料儲存的資料中間有一層 切片 split 的概念。對於小檔案處理,可使得乙個split對應多個實際的資料塊 當檔案較大被分成多個128m的塊時,乙個split可對應乙個塊。1.每個map有乙個環形記憶體緩衝區,用於儲存任務的輸出...
hadoop執行原理之shuffle
hadoop的核心思想是mapreduce,但shuffle又是mapreduce的核心。shuffle的主要工作是從map結束到reduce開始之間的過程。首先看下這張圖,就能了解shuffle所處的位置。圖中的partitions copy phase sort phase所代表的就是shuff...
hadoop的shuffle和排序
1.1 maptask執行內部原理 當map task開始運算,並產生中間資料時,其產生的中間結果並非直接就簡單的寫入磁碟。這中間的過程比較複雜,並且利用到了記憶體buffer來進行已經產生的部分結果的快取,並在記憶體buffer中進行一些預排序來優化整個map的效能。如上圖所示,每乙個map都會對...