MapReduce的切片機制
在Map階段會將讀取進來的資料進行邏輯切片進行處理,
此切片與HDFS的切塊不同,HDFS的切塊是將檔案按照block塊的形式保存起來,mr則是將檔案按照切片數進行計算
默認切片大小等于塊大小,也就是128m切一片,切片數與MapTask的數量是一致的,MapTask的并行度是由客戶端提交Job時的切片數決定的
MR的執行流程
MapTask階段 可以分為五個階段
Read階段:MapTask根據用戶撰寫的Reader從中決議出一個key/vaule
Map階段:將讀取到的key/value交給用戶撰寫的 map函式進行處理,然后產生新的key/value
Clooect收集階段:當資料通過map函式處理過后會呼叫context.write此函式會將生成的key/value進行磁區(呼叫Partition),
***(partiton可以自定義磁區,也可以使用默認的磁區器HashPartition,默認的磁區器會按照我們設定的reduceTask的數量進行磁區
也就是如果只設定了一個reduceTask就只會有一個磁區,如果磁區數不是1而reduceTask是1的話,不會執行磁區
因為MapTask執行磁區依據是先判斷reduceTask的數量)***
并且寫入一個環形緩沖區當中,
Spill階段:即溢寫階段,當環形緩沖區達到80%后會對資料進行溢寫,此時會對產生的小檔案內部進行一次快排保證每個小檔案的內部是有序的,
并在必要時對資料進行合并等操作,
Combine階段:當所有的資料全都溢寫到磁盤后會按照磁區對每個磁區內的所有小檔案進行一次歸并排序來形成一個大檔案
shuffle階段
從Map端開始對決議后的key/value進行磁區到Reduce端對磁區檔案進行合并(歸并排序)的程序叫做 shuffle,
shuffle的程序總共經過三次排序:
第一次排序是在Map端的環形緩沖區向磁盤刷寫內容時,對小檔案內的內容進行排序,
第二次排序是在Map端對環形緩沖區刷寫出來的所有小檔案進行合并,為歸并排序,
第三次排序是在Reduce段按照磁區對磁區內檔案進行合并,為歸并排序,
Reduce和Combiner
combiner是MR程式中Mapper和Reducer之外的一種組件,
combiner組件的父類就是Reducer
combiner和reducer的區別在于運行的位置:
conbiner:conbiner是在每一個MapTask所在的節點進行運行,用于區域合并
Reducer:reducer是接收全域所有Mapper的輸出結果,用于全域合并
combiner的意義就是對每一個maptask的輸出進行區域匯總,以減小網路傳輸量,
并非所有的mr程式都可以使用combiner,combiner能夠應用的前提是不能影響最終的業務邏輯,而且,combiner的輸出kv應該跟reducer的輸入kv型別要對應起來,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/437942.html
標籤:其他
