MapReduce過程詳解

2021-08-31 09:28:59 字數 897 閱讀 5383

1.輸入分片(input split):在進行map計算之前,mapreduce會根據輸入檔案計算輸入分片(input split),每個輸入分片(input split)針對乙個map任務。

2.map階段:就是我們寫的map函式,map函式效率相對好控制,而且一般map操作都是本地化操作也就是在資料儲存節點上進行;map函式每次處理一行資料,map主要用於資料的分組,為下一步reduce的運算做資料準備,map的輸出就是reduce的輸入。

3.寫入緩衝區: 每個map 任務都有乙個用來寫入輸出資料的迴圈記憶體緩衝區。這個緩衝區預設大小是100mb,一般到達80m時系統將會啟動乙個後台執行緒把緩衝區中的內容spill 到磁碟。

4.spill 執行緒在把緩衝區的資料寫到磁碟前,首先根據key的hash值的模運算對資料進行partitioner,打上標識。

5.之後對資料進行乙個二次快速排序,首先根據資料所屬的partition 排序,然後每個partition 中再按key 排序。

5.如果設定了combiner,接著執行combiner。

6.最後,每個map任務可能產生多個spill檔案,在每個map任務完成前,會通過多路歸併演算法將這些spill檔案歸併成乙個檔案。至此,map的shuffle過程就結束了。

7. 當所有的map 輸出都被拷貝後,reduce 任務進入排序階段(更恰當的說應該是歸併階段,因為排序在map 端就已經完成),這個階段會對所有的map 輸出進行歸併排序,這個工作會重複多次才能完成。

8.不斷地merge後,最後會生成乙個「最終檔案」,作為reduce的輸入。reduce是主要的邏輯運算階段,我們絕大部分業務邏輯都是在reduce階段完成的,並把最終結果儲存在hdfs上的。

詳解MapReduce過程

textinputformat的原始碼注釋為 檢視inputformat介面的原始碼注釋我們了解到這個介面的作用為 在inputformat的源 中有如下兩個方法 inputsplit getsplits jobconf job,int numsplits throws ioexception 獲取...

MapReduce過程詳解

資料執行的底層目前還是以hadoop為主,我們主要接觸的還是上層抽象出來的比較方便的資料工具,例如hive,spark,impala等等,那麼hadoop底層的核心原理又是什麼呢?hadoop的底層核心由hdfs,mapreduce和yarn組成,hdfs是大資料的儲存引擎,分布式檔案系統,yarn...

MapReduce 過程詳解

1 最簡單的過程 map reduce map partition reduce 3 增加了在本地先進性一次reduce 本地優化 減少後期網路的傳輸量 map combine 本地reduce partition reduce 一般說來,乙個完整的mapreduce過程可以分為以上3中提到的4個步...