一、在我們提交完mr程式之後,mr程式會先後經歷map,reduce階段,下面我們詳細的來解析一下各個階段
1 map階段,在這個階段主要分如下的幾個步驟read,map,collect,溢寫,combine階段
(1) 在read階段,maptask會呼叫使用者自定義的recordreader方法,在splitinput中解析出乙個個的key-value對
(2) 在map階段,maptask會接受由前面讀取來的資料,然後按照所需的邏輯對資料進行加工處理,形成新的key-value對
(3) 在collect階段,map在資料處理完成之後會呼叫outputcollector.collect()方法把資料寫入環形緩衝區中,這個環形緩衝區被分為了兩部分,一半是用來儲存資料的索引,一半是用來儲存資料,在分割槽中首先是按照分割槽號進行排序,在分割槽裡面在按照key進行排序,在環形緩衝區中預設的採用的是雜湊分割槽,如果想自定義分割槽可以重寫乙個類繼承partition在重新分割槽方法即可。
(4) 溢寫階段,當環形緩衝區中的資料到達整個緩衝區的百分之八十的時候(環形緩衝區預設大小是100m),就會把資料寫入本地的臨時檔案,但是為了提高效能在這兒可以呼叫combiner首先把資料合併之後再把資料寫入零時檔案,在環形緩衝區上的資料讀寫方法時索引儲存資料和儲存索引佔到總大小的百分之八十多的時候,雙方在結束的位置同時向開始的位置讀取資料,這樣迴圈往復。
(5) 合併階段,在前面產生的所有的臨時檔案,maptask採用輪轉的方式進行合併,並且在合併之後的分割槽中進行排序,這樣這個map就會產生乙個資料的輸出檔案。
(6) 如下圖所示
2、reduce階段主要包括如下的階段,cpoy階段,merge階段,sort階段,reduce階段
(1) copy階段主要是reducer階段從遠端的map的輸出去拷貝資料到本地的記憶體中,同乙個reducer的節點會把不同的map的輸出的同乙個分割槽拷貝到本地。
(2) merge階段,在開始拷貝資料的時候。reducetask會啟動兩個後台執行緒,合併記憶體中的資料和磁碟中的資料,防止使用過多的記憶體和磁碟。
(3) sort階段,由於在reduce的資料是按照key進行聚合排序的,但是在map的輸出的時候就已經進行排序,所以在這兒只需要簡單的歸併排序即可
(4) reduce階段 ,把已經按照key聚合的資料輸出給reducer按照我們的義務邏輯進行處理。
(5) 具體如下圖所示
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的結果檔案,再將這些檔案合併 歸併演算法 產生的大檔案是分割槽且排序且分好組了的...