简介
combiner要做的就是在每个map传输的时候,就把数据先聚合下,然后再传输
不然数据会一条一条传输,会很占用IO性能
但是要注意,用combiner,不能影响你的业务逻辑
注意他的调用次数不一定,map阶段小文件溢出的时候可能会调用多次,reduce阶段收到数据的时候可能也会调用
比如对数据求平均值,这边就对业务有影响了
写法
combiner组件的父类就是Reducer
然后写好了,在任务驱动那边写
//设置combainer
job.setCombinerClass(WorldCountCombiner.class);
如果combiner写的和reducer一样,这边也可以写reducer
combiner和reducer的区别
- combiner是在每一个maptask所在的节点运行,意义在于对每一个maptask的输出进行局部汇总,减少网络传输量
- reducer是接收全局所有Mapper的输出结果