MapReduce之Combiner合併

  • Combiner是MR程式中Mapper和Reducer之外的一種組件(本質是一個Reducer類)

  • Combinr組件的父類就是Reducer

  • Conbimer只有在驅動類里設置了之後,才會運行
    在這裡插入圖片描述

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

  1. ==Combiner是在每一個MapTask所在的節點運行
  2. 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會再次運行!

Tags: