MapReduce之Combiner合併
-
Combiner是MR程式中
Mapper和Reducer
之外的一種組件(本質是一個Reducer類) -
Combinr組件的父類就是
Reducer
-
Conbimer只有在驅動類里設置了之後,才會運行
-
Combiner和Reducer的區別在於運行的位置:
map—-sort—copy—sort(shuffle階段)—reduce
- ==Combiner是在每一個MapTask所在的節點運行
- Reducer是接收全局所有Mapper的輸出結果==
-
Combiner的意義就是對每一個MapTask的輸出進行局部匯總,以減小網路傳輸量(減少磁碟IO和網路IO)
-
Cormbiner能多應用的前提是不能影響最終的業務邏輯,而且,Combiner的輸出kv應該跟Reducer的輸入kv類型要對應起來。 Combiner用在加減操作的場景,不能用在乘除操作的場景
比如:
-
Combiner既有可能在MapTask端調用:
①每次溢寫前會調用Combiner對溢寫的數據進行局部合併
②在merge時,如果溢寫的片段數>=3,如果設置了Combiner,Combiner會再次對
數據進行Combine! -
Combiner既有可能在ReduceTask端調用:
③shuffle執行緒拷貝多個MapTask同一分區的數據,拷貝後執行merge和sort,
如果數據量過大,需要將部分數據先合併排序後,溢寫到磁碟!
如果設置了Combiner,Combiner會再次運行!