MapReduce流程詳解

MapReduce源於Google一篇論文,它充分借鑑了“分而治之”的思想,將一個數據處理過程拆分爲主要的Map(映射)與Reduce(歸約)兩步。簡單地說,MapReduce就是"任務的分解與結果的彙總"。


MapReduce (MR) 是一個基於磁盤運算的框架,賊慢,慢的主要原因:

1)MR是進程級別的,一個MR任務會創建多個進程(map task和reduce task都是進程),進程的創建和銷燬等過程需要耗很多的時間。 

2)磁盤I/O問題,  MapReduce作業通常都是數據密集型作業,大量的中間結果需要寫到磁盤上並通過網絡進行傳輸,這耗去了大量的時間。 


注:mapreduce 1.x架構有兩個進程:

JobTracker :負責資源管理和作業調度。

TaskTrachker:任務的執行者。運行 map task 和 reduce task。

在2.x的時候由yarn取代他們的工作了。


MapReduce工作流程:

圖片.png

HDFS上的文件—>InputFormat—>Map階段—>shuffle階段(橫跨Mapper和Reducer,在Mapper輸出數據之前和Reducer接收數據之後都有進行)—>Reduce階段 —>OutputFormat —>HDFS:output.txt


InputFormat接口:將輸入數據進行分片(split),輸入分片的大小一般和hdfs的blocksize相同(128M)。

Map階段: Map會讀取輸入分片數據,一個輸入分片(input split)針對一個map任務,進行map邏輯處理(用戶自定義)

Reduce階段:對已排序輸出中的每個鍵調用reduce函數。reduce task 個數通過setNumReduceTasks設定,即mapreduce.job.reduces參數的默認值1。此階段的輸出直接寫到輸出文件系統,一般爲hdfs。

MapReduce Shffle詳解

20190305154107943.png

爲了確保每個reducer的的輸入都是按鍵排序的,系統執行排序的過程,即將map task的輸出通過一定規則傳給reduce task,這個過程成爲shuffle。

Shuffle階段一部分是在map task 中進行的, 這裏成爲Map shuffle , 還有一部分是在reduce task 中進行的, 這裏稱爲Reduce shffle。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章