Shuffle和排序 性能
MapReduce確保每個reduce的輸出都按鍵排序,系統執行排序的過程---------將map輸出做爲輸入傳給reduce--------稱爲shuffle spa
Shuffle過程是MapReduce的」心臟」,也被稱爲奇蹟發生的地方 線程
1. 每一個map有一個環形內存緩衝區,用於存儲任務的輸出。默認大小100MB(io.sort.mb屬性),一旦達到閥值0.8(io.sort.spill.percent),一個後臺線程把內容寫到(spill)磁盤的指定目錄(mapred.local.dir)下的新建的一個溢出寫文件。
2. 寫磁盤前,要partition,sort。若是有combiner,combine排序後數據。
a)partition的意義在於能夠分區管理,分類導出數據;例如男女,我須要分紅兩個文件,我就能夠設置partition來區分,reduceTask至少2個來分別運行
b)運行conbiner的意義在因而map輸出更緊湊,使得寫到本地磁盤和傳給reducer的數據更少
3. 等最後記錄寫完,合併所有溢出寫文件爲一個分區且排序的文件。
排序
補充: 內存