1. 程式人生 > >MapReduce程式中的三次排序

MapReduce程式中的三次排序

在Map任務和Reduce任務的過程中,一共發生了3次排序

1)當map函式產生輸出時,會首先寫入記憶體的環形緩衝區,當達到設定的閥值,在刷寫磁碟之前,後臺執行緒會將緩衝區的資料劃分成相應的分割槽。在每個分割槽中,後臺執行緒按鍵進行內排序

2)在Map任務完成之前,磁碟上存在多個已經分好區,並排好序的,大小和緩衝區一樣的溢寫檔案,這時溢寫檔案將被合併成一個已分割槽且已排序的輸出檔案。由於溢寫檔案已經經過第一次排序,所有合併檔案只需要再做一次排序即可使輸出檔案整體有序。

3)在reduce階段,需要將多個Map任務的輸出檔案copy到ReduceTask中後合併,由於經過第二次排序,所以合併檔案時只需再做一次排序即可使輸出檔案整體有序

在這3次排序中第一次是記憶體緩衝區做的內排序,使用的演算法使快速排序,第二次排序和第三次排序都是在檔案合併階段發生的,使用的是歸併排序。