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的結果檔案,再將這些檔案合併 歸併演算法 產生的大檔案是分割槽且排序且分好組了的...