mr的规约是什么?

2020-08-19 08:52发布

mr的规约是什么?

mr的规约是什么?

2条回答
我是大脸猫
2020-08-19 09:21

一:什么是规约

map阶段读取文件,生成k2,v2,通过combiner规约可以在map阶段将k2进行合并,v2生成集合,从而减小了生成的文件大小,减少了reduct读取map阶段的文件时的网络传输。也就是说本该在reduct阶段进行相同key合并,value行程集合的过程在map阶段通过规约提前实现了。

combiner 是 MR 程序中 Mapper 和 Reducer 之外的一种组件

combiner 组件的父类就是 Reducer

combiner 和 reducer 的区别在于运行的位置:

combiner 是在每一个 maptask 所在的节点运行, Reducer 是接收全局所有 Mapper 的输出结果;

combiner 的意义就是对每一个 maptask 的输出进行局部汇总,以减小网络传输量

combiner 能够应用的前提是不能影响最终的业务逻辑,而且,combiner 的输出 kv 应该跟 reducer 的输入 kv 类型要对应起来

二:代码实现规约类:

import org.apache.hadoop.io.NullWritable;import org.apache.hadoop.mapreduce.Reducer;import java.io.IOException;/** * 自定义规约类 * 在Map阶段,所以key和value是k2,v2 * 目的:将相同key的value放到一起,以起到减少map端数据量,在reduce阶段读取map阶段文件时从而减小网络传输 * 注意:不是所有的业务都用到这个规约类特性,例如计算文件中数值的平均值时,此时在map阶段数据就不能合并在一起 */public class MyCombinerClass extends Reducer {@Overrideprotected void reduce(SortBean key, Iterable values, Context context) throws IOException, InterruptedException {for (NullWritable value : values) {context.write(key,value);}}}

三:驱动程序设置规约类

//3.设置规约类,可以直接设置设置成自定义的reduce类

job.setCombinerClass(MyCombinerClass.class);


参考链接:https://blog.csdn.net/qq_15076569/article/details/84206163

一周热门 更多>