简介

combiner要做的就是在每个map传输的时候,就把数据先聚合下,然后再传输
不然数据会一条一条传输,会很占用IO性能

但是要注意,用combiner,不能影响你的业务逻辑
注意他的调用次数不一定,map阶段小文件溢出的时候可能会调用多次,reduce阶段收到数据的时候可能也会调用

比如对数据求平均值,这边就对业务有影响了

image.png

写法

combiner组件的父类就是Reducer

然后写好了,在任务驱动那边写

  1. //设置combainer
  2. job.setCombinerClass(WorldCountCombiner.class);

如果combiner写的和reducer一样,这边也可以写reducer

combiner和reducer的区别

  • combiner是在每一个maptask所在的节点运行,意义在于对每一个maptask的输出进行局部汇总,减少网络传输量
  • reducer是接收全局所有Mapper的输出结果