1. 程式人生 > >Hadoop Mapreduce的shuffle過程詳解

Hadoop Mapreduce的shuffle過程詳解

1、map task讀取資料時預設呼叫TextInputFormat的成員RecoreReader,RecoreReader呼叫自己的read()方法,進行逐行讀取,返回一個key、value;

2、返回的key、value交給自定義的map方法,輸出的context.write(key,value),再交給內部的OutputCollecter會不斷寫入一個環形緩衝區

  (就是一個數組,記憶體空間預設100M);

3、隨著不斷的寫入,一般只佔預設記憶體的80%,剩下的空間需要在溢位之前進行分割槽以及根據key進行快速排序,spiller就是負責將分過區並排好序的資料

  寫入本地檔案,溢位一次就會產生一個檔案,這些檔案存放於map task的工作目錄,在溢位前可以使用combiner對資料進行合併,combiner會提高整體的

  運算速度,但是有可能會對最終結果造成影響,所以使用時需考慮清楚;

4、map task在本地產生的多個檔案需要進行歸併排序成一個大檔案,也就是map task的最終檔案,這個合併的過程稱為merge,這個合併過程也可以使用combiner;

5、reduce task會將各個map task產生的相應分割槽的資料下載到本地磁碟工作目錄,合併檔案並對這些資料進行歸併排序;

6、通過呼叫GroupingComparaor(key,nextk)識別出key相同的一組資料;

7、然後一組相同的key呼叫一次reduce方法,context.write(k,v)通過OutputFormat寫入最終的檔案。

以上從第三步到第六步就是shuffle的過程。