MapReduce 的 shuffle 過程中經歷了幾次 sort ?


shuffle 是從map產生輸出到reduce的消化輸入的整個過程。

排序貫穿於Map任務和Reduce任務,是MapReduce非常重要的一環,排序操作屬於MapReduce計算框架的默認行為,不管流程是否需要,都會進行排序。
在MapReduce計算框架中,主要用到了兩種排序方法:快速排序和歸並排序

1)快速排序:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據比另外一部分的所有數據都小,然后再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此使整個數據成為有序序列。
2)歸並排序:歸並排序在分布式計算里面用的非常多,歸並排序本身就是一個采用分治法的典型應用。歸並排序是將兩個(或兩個以上)有序表合並成一個新的有序表,即把待排序序列分為若干個有序的子序列,再把有序的子序列合並為整體有序序列。
在map任務和reduce任務的過程中,一共發生3次排序操作。

當map函數產生輸出時,會首先寫入內存的環形緩沖區,當達到設定的閾值,在刷寫磁盤之前,后台線程會將緩沖區的數據划分成相應的分區。在每個分區中,后台線程按鍵進行內排序,如下圖所示:

在Map任務完成之前,磁盤上存在多個已經分好區,並排好序的、大小和緩沖區一樣的溢寫文件,這時溢寫文件將被合並成一個已分區且已排序的輸出文件。由於溢寫文件已經經過第一次排序,所以合並文件時只需要再做一次排序就可使輸出文件整體有序。
在shuffle階段,需要將多個Map任務的輸出文件合並,由於經過第二次排序,所以合並文件時只需要再做一次排序就可使輸出文件整體有序,如下圖所示。

在這3次排序中第一次是在內存緩沖區做的排序,使用的算法是快速排序,第二次排序和第三次排序都是在文件合並階段發生的,使用的是歸並排序。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM