MapReduce流程詳解

在這裏插入圖片描述

MapReduce 流程詳解

客戶端階段:
我們在hdfs上有一個需要分析的文件a.txt
在客戶端在提交處理之前,客戶端先獲取文件,然後程序進行一個參數配置,對文件進行切片,
切片程序:首先計算切片的最大最小值, 從而確定切片大小,一般爲128m,也可以根據自身的需要調整大小, 計算切片大小的邏輯:Math.max(minSize, Math.min(maxSize, blockSize)).之後檢查文件是否可分,如果是壓縮文件則不可分,之後是開始切片,切片的方法是計算剩餘文件是否是切片大小的1.1倍,如果大於1.1倍則繼續切,如果小於1.1倍,則停止,直接將最後的內容切成一片.結束後計算切片數量.

Map階段:
1.mapper階段:
客戶端向yarn提交切片信息,jar包,配置信息等,yarn的resourcemanager會生成mapreduceappmanager,mrappmanager會根據切片數量生成相應數量的maptask,maptask接收到任務後,啓動inputformat,inputformat生成的RecordReader讀取切片信息,按照行對信息生成key,value值.生成kv值交給mapper進行邏輯運算,
2.mapshuffle階段:
之後outputcollector將map函數處理過的新kv值送到內存上的圓形緩衝區,該緩衝區默認爲100m,上面一半記錄了數據的索引等信息,一部分記錄了數據的kv值.在此環形緩衝區數據達到百分之八十時就會溢出到hdfs上保存與此同時,會對新的kv值進行,根據key的哈希函數分區,根據key進行全排序
.形成一個不同分區且分區內有序的文件.
之後將一個maptask中的幾個分區且區內有序的文件使用分區歸併的方法對分區進行合併和排序,形成一個擁有幾個分區的區內有序文件.
Reduce階段:
Reducer是通過HTTP的方式得到輸出文件的分區
Reducetask將map階段的分區且區內有序的文件進行收集,一個reducetask對應一個分區,不同的map階段生成的文件會分別進入不同的reducetask,如果數據量小則在內存中直接進行合併,如果數據量大則進入hdfs中進行合併,最終將不同reducetask中的文件進行歸併成我們想要的文件.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章