MapReduce Shuffle原理分析

2021-09-29 21:56:56 字數 1291 閱讀 5472

​ shuffle的本意是洗牌,把一組有規則的資料打亂成無規則的資料。而在mr中,shuffle更像是洗牌的逆過程,指的是將map端的無規則資料按指定規則打亂「打亂」成具有一定規則的資料,以便reduce端接收處理。

​ 在shuffle之前,也就是在map階段,mapreduce會對要處理的資料進行分片(split)操作,為每乙個分片分配乙個maptask任務。 接下來map會對每乙個分片中的每一行資料進行處理得到鍵值對(key,value)此時得到的鍵值對又要做「中間結果」。此後便進入reduce階段,可以看出shuffle階段的作用是處理「中間結果」。由於shuffle涉及到了磁碟的讀寫和網路的傳輸,因此shuffle過程直接決定了整個程式的執行效率。

shuffle的過程基本要求:

1.完整的從map task端拉取資料到reduce task端。

2.在拉取資料的過程中,盡可能減少網路消耗。

3.盡可能減少磁碟io對task執行效率的影響。

​ 1)map端的shuffle:

map端會處理資料並產生中間結果,這個中間結果會寫到本地磁碟。map的輸出結果首先被快取到記憶體,當快取區(環狀緩衝區)達到80%(預設大小為100mb),就會啟動溢寫操作。當前啟動溢寫操作時,首先把快取中的資料進行分割槽,對每個分割槽的資料進行排序、合併。之後再寫入到磁碟中,每次溢寫都會生成新的磁碟檔案,隨著job執行,被溢寫出到磁碟的檔案會越來越多,在map任務全部結束之前,這些溢寫被歸併成乙個大的磁碟檔案,然後通知相應的reduce任務來領取屬於自己的資料。

​ 2)reduce端的shuffle

reduce端的shuffle主要包括三個階段,copy、merge和reduce。

每個reduce task負責處理乙個分割槽的檔案,以下是reduce task的處理流程:

1.reduce task從每個map task的結果檔案中拉取對應分割槽的資料。因為資料在map階段是分好區的,並且會有乙個額外的索引檔案記錄每個分割槽的起始偏移量。所以reduce task取資料的時候直接根據偏移量拉就ok了。

2.reduce task從每個map task拉取分割槽資料的時候會進行再次合併、排序,按照自定義的reduce邏輯**取處理。

3.最後就是reduce過程了(聚合)。

MapReduce shuffle階段詳解

在mapreduce中,shuffle過程是mapreduce的核心,它分布在mapreduce的map階段和reduce階段,共可分為6個詳細的階段 1 collect階段 將maptask的結果輸出到預設大小為100m的mapoutputbuffer內部環形記憶體緩衝區,儲存 的是key val...

MapReduce shuffle過程及壓縮機制

map階段處理的資料如何傳遞給reduce階段,是mapreduce框架中最關鍵的乙個流程,這個流程就叫shuffle。shuffle 核心機制 資料分割槽,排序,規約,分組,合併等過程。shuffle是mapreduce的核心,它分布在mapreduce的map階段和reduce階段。一般把從ma...

mapreduce shuffle 講的很詳細

mapreduce 是現今乙個非常流行的分布式計算框架,它被設計用於平行計算海量資料。第乙個提出該技術框架的是google 公司,而google 的靈感則來自於函式式程式語言,如lisp,scheme,ml 等。mapreduce 框架的核心步驟主要分兩部分 map 和reduce。當你向mapre...