對分組後的數據進行規約(可有)
combiner
- 每個map可能會產生大量的輸出,combiner的做用就是在map端對輸出先作一次合併,以減小傳輸到reducer的數據量。
- combiner最基本是實現本地key的歸併,combiner具備相似本地的reduce功能。 若是不用combiner,那麼,全部的結果都是reduce完成,效率會相對低下。使用combiner,先完成的map會在本地聚合,提高速度。
- 注意:Combiner的輸出是Reducer的輸入,Combiner毫不能改變最終的計算結果。因此從個人想法來看,Combiner只應該用於那種Reduce的輸入key/value與輸出key/value類型徹底一致,且不影響最終結果的場景。好比累加,最大值等。
爲何使用Combiner?Combiner發生在Map端,對數據進行規約處理,數據量變小了,傳送到reduce端的數據量變小了,傳輸時間變短,做業的總體時間變短。
爲何Combiner不做爲MR運行的標配,而是可選步驟呢?由於不是全部的算法都適合使用Combiner處理,例如求平均數。
Combiner自己已經執行了reduce操做,爲何在Reducer階段還要執行reduce操做呢?combiner操做發生在map端的,處理一個任務所接收的文件中的數據,不能跨map任務執行;只有reduce能夠接收多個map任務處理的數據。