Combiner是MR程序中Mapper和Reducer
以外的一種組件(本質是一個Reducer類)網絡
Combinr組件的父類就是Reducer
app
Conbimer只有在驅動類裏設置了以後,纔會運行
線程
Combiner和Reducer的區別在於運行的位置:
map----sort---copy---sort(shuffle階段)---reducecode
Combiner的意義就是對每個MapTask的輸出進行局部彙總,以減少網絡傳輸量(減小磁盤IO和網絡IO)orm
Cormbiner能多應用的前提是不能影響最終的業務邏輯,並且,Combiner的輸出kv應該跟Reducer的輸入kv類型要對應起來。 Combiner用在加減操做的場景,不能用在乘除操做的場景
好比:
blog
Combiner既有可能在MapTask端調用:
①每次溢寫前會調用Combiner對溢寫的數據進行局部合併
②在merge時,若是溢寫的片斷數>=3,若是設置了Combiner,Combiner會再次對
數據進行Combine!排序
Combiner既有可能在ReduceTask端調用:
③shuffle線程拷貝多個MapTask同一分區的數據,拷貝後執行merge和sort,
若是數據量過大,須要將部分數據先合併排序後,溢寫到磁盤!
若是設置了Combiner,Combiner會再次運行!圖片