MapReduce中的shuffle


https://blog.csdn.net/u014374284/article/details/49205885

https://blog.csdn.net/asn_forever/article/details/81233547

https://blog.csdn.net/u014374284/article/details/49205885

 

個人覺得整個過程很復雜,不管是面試還是筆試說出大概流程就可以了。

在Map端的shuffle過程是對Map的結果進行分區、排序、分割,然后將屬於同一划分(分區)的輸出合並在一起並寫在磁盤上,最終得到一個分區有序的文件,分區有序的含義是map輸出的鍵值對按分區進行排列,具有相同partition值的鍵值對存儲在一起,每個分區里面的鍵值對又按key值進行升序排列(默認)。

另外一種說法map段的shuffle:

1、中間結果”不會立馬寫入磁盤,而是優先存儲到map節點的“環形內存緩沖區”,在寫入的過程中進行分區(partition)

ps:中間結果為:map階段,MapReduce會對要處理的數據進行分片(split)操作,

map()函數會對每一個分片中的每一行數據進行處理得到鍵值對(key,value),其中key為偏移量,value為一行的內容。

此時得到的鍵值對又叫做“中間結果”。

2、當寫入的數據量達到預先設置的闕值后(mapreduce.map.io.sort.spill.percent,默認0.80,或者80%)便會啟動溢寫出線程將緩沖區中的那部分數據溢出寫(spill)到磁盤的臨時文件中,並在寫入前根據key進行排序(sort)和合並(combine,可選操作)

3、當整個map任務完成溢出寫后,會對磁盤中這個map任務產生的所有臨時文件(spill文件)進行歸並(merge)操作生成最終的正式輸出文件此時的歸並是將所有spill文件中的相同partition合並到一起,並對各個partition中的數據再進行一次排序(sort),生成key和對應的value-list,文件歸並時,如果溢寫文件數量超過參數min.num.spills.for.combine的值(默認為3)時,可以再次進行合並。

在Reduce端,shuffle主要分為復制Map輸出、排序合並兩個階段。


免責聲明!

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



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