Hadoop中的Shuffle(17)

Shuffle描述着數據從Map Task輸出到Reduce Task輸入的這段過程。
線程

Map端排序

            一、每一個Map有一個環形內存緩衝區,用於存儲任務的輸出,默認大小100MB(io.sort.mb屬性),一旦達到閥值內存

                 0.8(io.sort.spill.percent),一個後臺線程把內容寫到(spill)磁盤的指定目錄(mapred.local.dir)下的新建的一個
it

                 溢出文件。io

            二、在寫入磁盤前,要Partitioner,Sort,若是有Combiner(聚合),Combiner排序後在寫入數據。
後臺

            三、等最後把記錄寫完,合併所有溢出寫文件爲一個分區且排序的文件。
map

Reduce端
並行

             一、Reduce經過Http方式獲得輸出的文件的分區。
im

             二、TaskTracker爲分區文件運行Reduce任務。複製階段把Map輸出複製到Reduce的內存或磁盤。一個Map任                     務完成,Reduce就開始複製輸出。
數據

             三、排序階段合併Map輸出,而後走Reduce階段。

             注意:在有些狀況下,也有可能沒有任何的Reduce,當前數據處理能夠徹底並行時,即無需混洗(shuffle),可能

                       會出現無Reduce任務的狀況,在這種狀況下,惟一的非本地節點數據傳輸是Map任務將結果寫入HDFS.


                                                                                                                        Name:Xr

                                                                                                                          Date:2014-03-04 21:55

相關文章
相關標籤/搜索