hadoop的规约操作Combiner(规约) 步骤1.5

来源:互联网 发布:单据打印软件 编辑:程序博客网 时间:2024/06/05 09:45

job.setCombinerClass(MyReduce.class);//规约操作,形参是自定义的Reducer类

问:为什么使用Combiner?

答:Combiner发生在Map端,对数据进行规约处理,数据量变小了,传送到reduce端的数据量变小了,传输时间变短,作业的整体时间变短。


问:为什么Combiner不作为MapperReduce运行的标配,而是可选步骤呢?
答:因为不是所有的算法都适合使用Combiner处理,例如求平均数。


问:Combiner本身已经执行了reduce操作,为什么在Reducer阶段还要执行reduce操作呢?

答:combiner操作发生在map端的,处理一个任务所接收的文件中的数据,不能跨map任务执行;只有reduce可以接收多个map任务处理的数据。


例如有两个文件,每个文件中都有

hello you 

hello me

一个map任务读取一个文件,当一个map任务执行完后输出的是(包含Combiner操作)<hello,2><you,1><me,1>

而我们最终希望获取的是<hello,4><you,2><me,2>,所以说Combiner并不能完成Reducer的工作!因为Combiner只能处理一个任务所接收的文件中的数据,不能跨map任务执行。

0 0