MapReduce之Combiner合併

  • Combiner是MR程序中Mapper和Reducer以外的一種組件(本質是一個Reducer類)網絡

  • Combinr組件的父類就是Reducerapp

  • Conbimer只有在驅動類裏設置了以後,纔會運行
    在這裏插入圖片描述線程

  • Combiner和Reducer的區別在於運行的位置:
    map----sort---copy---sort(shuffle階段)---reducecode

  1. ==Combiner是在每個MapTask所在的節點運行
  2. Reducer是接收全局全部Mapper的輸出結果==
  • 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會再次運行!圖片

相關文章
相關標籤/搜索