1. 程式人生 > >MapReduce工作原理流程簡介

MapReduce工作原理流程簡介

接下來 處理 應該 blog 隨著 ner combine 百分比 默認

技術分享圖片

在MapReduce整個過程可以概括為以下過程:

輸入 --> map --> shuffle --> reduce -->輸出

輸入文件會被切分成多個塊,每一塊都有一個map task

map階段的輸出結果會先寫到內存緩沖區,然後由緩沖區寫到磁盤上。默認的緩沖區大小是100M,溢出的百分比是0.8,也就是說當緩沖區中達到80M的時候就會往磁盤上寫。如果map計算完成後的中間結果沒有達到80M,最終也是要寫到磁盤上的,因為它最終還是要形成文件。那麽,在往磁盤上寫的時候會進行分區和排序。一個map的輸出可能有多個這個的文件,這些文件最終會合並成一個,這就是這個map的輸出文件。

技術分享圖片

流程說明如下:

1、輸入文件分片,每一片都由一個MapTask來處理

2、Map輸出的中間結果會先放在內存緩沖區中,這個緩沖區的大小默認是100M,當緩沖區中的內容達到80%時(80M)會將緩沖區的內容寫到磁盤上。也就是說,一個map會輸出一個或者多個這樣的文件,如果一個map輸出的全部內容沒有超過限制,那麽最終也會發生這個寫磁盤的操作,只不過是寫幾次的問題。

3、從緩沖區寫到磁盤的時候,會進行分區並排序,分區指的是某個key應該進入到哪個分區,同一分區中的key會進行排序,如果定義了Combiner的話,也會進行combine操作

4、如果一個map產生的中間結果存放到多個文件,那麽這些文件最終會合並成一個文件,這個合並過程不會改變分區數量,只會減少文件數量。例如,假設分了3個區,4個文件,那麽最終會合並成1個文件,3個區

5、以上只是一個map的輸出,接下來進入reduce階段

6、每個reducer對應一個ReduceTask,在真正開始reduce之前,先要從分區中抓取數據

7、相同的分區的數據會進入同一個reduce。這一步中會從所有map輸出中抓取某一分區的數據,在抓取的過程中伴隨著排序、合並。

8、reduce輸出

MapReduce工作原理流程簡介