MapReduce執行全流程

2021-08-13 18:47:34 字數 1713 閱讀 3433

mapreduce執行全流程:

nodemanager從

resourcemanager

那裡拿到

task

之後,就啟動乙個規定

cpu、記憶體的

container

用來執行

maptask。

那麼maptask就開始工作了,

maptask

通過inputformat

元件,從任務所指定路徑(如

:hdfs)

上開始讀取資料。需注意的是,他一次唯讀一行,讀完一行調一次使用者寫的

map方法,資料格式為

,其中k

為起始偏移量

(按位元組來算),

v為那一行的內容。

經過使用者的

map邏輯處理後,通過上下文

context.write()

將處理後得到的

寫出去。

此時有乙個元件outputcollector將寫出的資料,寫到乙個環形緩衝區中,這個環形緩衝區可以實現非同步工作,提高了程式的工作效率。

這個環形緩衝區,預設當資料佔到80%的時候,就發生

split

溢位,溢位的時候通過

hashpartitioner

和key.compareto

進行分割槽、排序。於此同時,程式繼續往剩下的

20%寫

。如下圖:

溢位到檔案的時候,會呼叫使用者定義的combiner元件,對相同k的

v進行combiner

,然後再寫到檔案中去。這裡會源源不斷的溢位檔案,從上乙個溢位位置開始,每滿

80%就開始溢位。那麼就會有很多檔案,此時就會呼叫歸併排序,將他們歸併起來形成乙個大檔案。如果此時發現使用者定義了

combiner

,就會呼叫

combiner

形成最終的結果檔案。如下圖:

與此同時,還有很多maptask在執行,他們都執行完了後。

會知道,因為

時刻都在監控著這些

maptask

,他們一完成

馬上向resourcemanager

申請新的

container

來執行reduce

的任務。

nodemanager領取到任務後,首先從多個

maptask

reducetask

本地磁碟的工作目錄。然後進行歸併排序。

然後通過

groupingcomparaor(k,nextk)

元件,判斷哪些資料為一組

最後將資料傳給reduce邏輯處理,資料的格式為

,其中k

為一組<

k1,v1>  中的第乙個

k。邏輯處理後,

context.write()

寫出去,最後通過

outputformat

寫到hdfs上。

MapReduce執行流程

mapreduce的大體流程是這樣的,如圖所示 由可以看到mapreduce執行下來主要包含這樣幾個步驟 1.首先對輸入資料來源進行切片 2.master排程worker執行map任務 3.worker讀取輸入源片段 4.worker執行map任務,將任務輸出儲存在本地 5.master排程work...

MapReduce執行流程

1.客戶端提交作業給yarn集群,rm接受客戶端所提交的作業。2.rm根據作業所要處理的檔案來決定map任務在哪些節點上執行,然後確定reduce任務在哪些節點 nn 上執行。3.rm分配map任務和reduce任務到相應的節點上。4.map任務開始執行,將執行結果臨時儲存到本地 執行過map任務的...

MapReduce執行流程

mapreducer工作流程圖 mapreducer工作流程 reducer shuffle start 6.reducer shuffle啟動後會到不同的map結果檔案中拉取相同區號的結果檔案,再合併這些來自不同map的結果檔案,再將這些檔案合併 歸併演算法 產生的大檔案是分割槽且排序且分好組了的...