您好,登錄后才能下訂單哦!
Hadoop的MapReduce shuffle過程,非常重要。只有熟悉整個過程才能對業務了如指掌。
MapReduce執行流程
輸入和拆分:
不屬于map和reduce的主要過程,但屬于整個計算框架消耗時間的一部分,該部分會為正式的map準備數據。
分片(split)操作:
split只是將源文件的內容分片形成一系列的 InputSplit,每個 InputSpilt 中存儲著對 應分片的數據信息(例如,文件塊信息、起始位置、數據長度、所在節點列表…),并不是將源文件分割成多個小文件,每個InputSplit 都由一個 mapper 進行后續處理。
每個分片大小參數是很重要的,splitSize 是組成分片規則很重要的一個參數,該參數由三個值來確定:
minSize:splitSize 的最小值,由 mapred-site.xml 配置文件中 mapred.min.split.size 參數確定。
maxSize:splitSize 的最大值,由 mapred-site.xml 配置文件中mapreduce.jobtracker.split.metainfo.maxsize 參數確定。
blockSize:HDFS 中文件存儲的快大小,由 hdfs-site.xml 配置文件中 dfs.block.size 參數確定。
splitSize的確定規則:splitSize=max{minSize,min{maxSize,blockSize}}
數據格式化(Format)操作:
將劃分好的 InputSplit 格式化成鍵值對形式的數據。其中 key 為偏移量,value 是每一行的內容。
值得注意的是,在map任務執行過程中,會不停的執行數據格式化操作,每生成一個鍵值對就會將其傳入 map,進行處理。所以map和數據格式化操作并不存在前后時間差,而是同時進行的。
2)Map 映射:
是 Hadoop 并行性質發揮的地方。根據用戶指定的map過程,MapReduce 嘗試在數據所在機器上執行該 map 程序。在 HDFS中,文件數據是被復制多份的,所以計算將會選擇擁有此數據的最空閑的節點。
在這一部分,map內部具體實現過程,可以由用戶自定義。
3)Shuffle 派發:
Shuffle 過程是指Mapper 產生的直接輸出結果,經過一系列的處理,成為最終的 Reducer 直接輸入數據為止的整個過程。這是mapreduce的核心過程。該過程可以分為兩個階段:
Mapper 端的Shuffle:由 Mapper 產生的結果并不會直接寫入到磁盤中,而是先存儲在內存中,當內存中的數據量達到設定的閥值時,一次性寫入到本地磁盤中。并同時進行 sort(排序)、combine(合并)、partition(分片)等操作。其中,sort 是把 Mapper 產 生的結果按照 key 值進行排序;combine 是把key值相同的記錄進行合并;partition 是把 數據均衡的分配給 Reducer。
Reducer 端的 Shuffle:由于Mapper和Reducer往往不在同一個節點上運行,所以 Reducer 需要從多個節點上下載Mapper的結果數據,并對這些數據進行處理,然后才能被 Reducer處理。
4)Reduce 縮減:
Reducer 接收形式的數據流,形成形式的輸出,具體的過程可以由用戶自定義,最終結果直接寫入hdfs。每個reduce進程會對應一個輸出文件,名稱以part-開頭。
歡迎補充。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。