mapreduce 執行流程:
(shuffle在maptask和reducetask之間)
1、 資料的底層儲存:檔案在hdfs中以block的方式存放時,假如分為3塊,為了計算邏輯切片的大小,用fileinputformat類獲得get split方法進行切片,理論上乙個切片==乙個塊區,最後乙個邏輯切片的大小預設為140.8m。乙個切片對應乙個maptask任務。
3、 資料先寫入到收集器collector(緩衝佇列),資料分為元資料和原始資料,再寫到環形緩衝區(記憶體中)預設大小為100m,環形緩衝區中達到溢寫閥值80m後會寫入到磁碟,預留的20m接收maptask的資料寫入,其中當20m寫滿後,80m還沒有釋放,寫執行緒會阻塞,直到緩衝區中溢寫到磁碟後再次啟動,當80m釋放時,元資料和原始資料形成背對模式開始新分界線,環形緩衝區中最後內容小於80m時,flush到磁碟。
4、 第一次排序:(快排),資料溢寫到磁碟前,會在緩衝區中按照reducetask數量劃分成相同數量的分割槽進行編號排序,按照map輸出的key進行排序,同一分割槽中相同的key在一起,(如有combier,會是map 更加緊湊),最後在本地磁碟生成分好區且排好序的檔案。
5、 第二次排序:merge以及sort的過程,本地磁碟的所有溢寫檔案根據小溢寫檔案分割槽而分割槽,從而得到乙個結果檔案,每分割槽數會再次根據map輸出的key進行排序(如有combiner會使得重複合併),得到的結果是嚴格分割槽有序的,這個過程也是歸併排序。
7、 reducetask執行的為reducer中的run方法,乙個reducetask建立乙個物件呼叫一次run方法,run中呼叫reduce方法,通過context.write(k,v)輸出。
8、 reduce方法先寫出到collector(緩衝佇列)中再到buffer(記憶體緩衝區中),達到緩衝區中閥值50m後追加到hdfs檔案(part-r-0000)中。
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的結果檔案,再將這些檔案合併 歸併演算法 產生的大檔案是分割槽且排序且分好組了的...