map端的shuffle:
每個maptask的數(shù)據(jù)會進入環(huán)形緩沖區(qū)中,(默認100M,溢出比是80%),數(shù)據(jù)在寫入時,會進行分區(qū),往數(shù)據(jù)中添加一個分區(qū)屬性,當數(shù)據(jù)寫入到80%時,會啟動一個溢寫的線程,把內(nèi)容寫到磁盤的指定目錄下的新建的一個溢出寫文件钟鸵,寫磁盤前要經(jīng)過partition降允、sort料睛、Combiner。等最后記錄寫完骤星,合并全部溢出寫文件為一個分區(qū)且排序的文件。
reduc端的shuffle:
可以分為復制階段、排序階段幸撕、reduce階段.
復制階段:map輸出文件位于運行map任務的tasktracker的本地磁盤上蹬蚁,reduce通過http的方式獲取輸出文件的分區(qū)恃泪,tasktracker為分區(qū)文件運行reduce任務,只要有一個map任務完成犀斋,reduce任務就開始復制輸出贝乎。
排序階段:更恰當?shù)恼f法是合并階段,因為排序是在map端進行的叽粹。這個階段將合并map輸出览效,維持其順序排序,循環(huán)進行虫几。
reduce階段:對已排序輸出中的每個鍵調(diào)用reduce函數(shù)锤灿,此階段的輸出直接寫到輸出文件系統(tǒng),一般為hdfs