MapReduce執行過程簡要總結


宏觀上MapReduce可以分為以下三個階段,如下圖1所示。
階段1:input/map/partition/sort/spill
階段2:mapper端merge
階段3:reducer端merge/reduce/output

圖1 MapReduce執行過程

以下分別對上述三個階段詳解。首先是Mapper端的執行邏輯,主要包含以下三點,如圖2所示:
1. 將key/value/Partition寫入到內存緩沖區中
2. 當緩沖區使用量達到一定閥值,將其spill到disk上,spill前,需要進行排序
3. 排序時先按照Partition進行排序,再按照key進行排序,默認排序算法是快速排序。
注意: 在內存中進行排序時,數據本身不用移動,僅對索引排序即可

圖2 Mapper端邏輯

接下來是Map端的歸並實現,主要包含以下兩點,如圖3所示。
1.對生成的多個spill文件,進行歸並排序
2.最終歸並成一個大文件
注意:
1. 由於每一個spill文件都是按分區和key排序好的,所以歸並完的文件也是按分區和key排序好的。
2.在進行歸並的時候,不是一次性的把所有的spill文件歸並成一個大文件。而是部分spill文件歸並成中間文件,然后中間文件和剩下的spill文件再進行歸並。


圖3 Map端Merge

最后是Reducer端的Merge和Reduce,主要包含以下三點,如圖4所示:
1. 當有新的MapTask事件完成時,拷貝線程從指定的機器上面拷貝數據
2. 當數據拷貝的時候,分兩種情況,當數據量小的時候就會寫入內存當中,當數據量大的時候就會寫入硬盤當中
3. 來自不同的機器的多個數據文件,需要歸並成一個文件.在拷貝文件過程中會進行文件歸並操作.

圖4 Reducer端Merge和Reduce

轉載請注明出處。


免責聲明!

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



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