博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第2节 mapreduce深入学习:7、MapReduce的规约过程combiner
阅读量:5367 次
发布时间:2019-06-15

本文共 1236 字,大约阅读时间需要 4 分钟。

第2节 mapreduce深入学习:7、MapReduce的规约过程combiner

每一个 map 都可能会产生大量的本地输出,Combiner 的作用就是对 map 端的输出先做一次合并,以减少在 map 和 reduce 节点之间的数据传输量,以提高网络IO 性能,是 MapReduce 的一种优化手段之一。

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

   combiner 组件的父类就是 Reducer

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

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

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

   具体实现步骤:

1、自定义一个 combiner 继承 Reducer,重写 reduce 方法

2、在 job 中设置:  job.setCombinerClass(CustomCombiner.class)

 

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

 

代码:

SortMain: 添加如下代码
//设置第五步:规约 job.setCombinerClass(SortCombiner.class);
SortCombiner:
package cn.itcast.demo2.sort; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Reducer; import java.io.IOException; /**  * 注意自定义combiner的话,输入类型和输出类型,都是key2  value2  * 作用:减少输出到reduce的key2的个数  */ public class SortCombiner extends Reducer
{
@Override protected void reduce(PairSort key, Iterable
values, Context context) throws IOException, InterruptedException {
//这里面写规约的逻辑 for (Text value:values){
context.write(key,value); } } }

转载于:https://www.cnblogs.com/mediocreWorld/p/11025441.html

你可能感兴趣的文章
《演说之禅》I & II 读书笔记
查看>>
thinkphp3.2接入支付宝支付接口(PC端)
查看>>
【转】在Eclipse中安装和使用TFS插件
查看>>
C#中Monitor和Lock以及区别
查看>>
【NOIP2017】奶酪
查看>>
5.6.3.7 localeCompare() 方法
查看>>
Linux下好用的简单实用命令
查看>>
描绘应用程序级的信息
查看>>
php环境搭建脚本
查看>>
php 编译常见错误
查看>>
MES架构
查看>>
hdu 2767(tarjan)
查看>>
sklearn之分类模型混淆矩阵和分类报告
查看>>
MySQL各存储引擎
查看>>
项目--简单导出CSV文件
查看>>
Oracle session相关数据字典(一)
查看>>
C#用正则表达式 获取网页源代码标签的属性或值
查看>>
BZOJ 3399 [Usaco2009 Mar]Sand Castle城堡(贪心)
查看>>
WCF(一) 简单的认知
查看>>
[MFC][DShow]简单例子
查看>>