前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2021年大数据Hadoop(二十一):MapReuce的Combineer

2021年大数据Hadoop(二十一):MapReuce的Combineer

作者头像
Lansonli
发布2021-10-11 15:47:28
3430
发布2021-10-11 15:47:28
举报
文章被收录于专栏:Lansonli技术博客Lansonli技术博客

​​​​​​​MapReuce的Combineer

概念

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

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

2、combiner 组件的父类就是 Reducer

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

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

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

​​​​​​​实现步骤

在这里以单词统计为例,实现Combiner

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

代码语言:javascript
复制
public class MyCombiner extends Reducer<Text,LongWritable,Text,LongWritable> {

     /*

       key : hello

       values: <1,1,1,1>

     */

    @Override

    protected void reduce(Text key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException {

        long count = 0;

        //1:遍历集合,将集合中的数字相加,得到 V3

        for (LongWritable value : values) {

            count += value.get();

        }

        //2:将K3和V3写入上下文中

        context.write(key, new LongWritable(count));

    }

}

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

代码语言:javascript
复制
job.setCombinerClass(MyCombiner.class);

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

3、对使用Combiner之前和之后的日志进行对比

通过对比发现,使用Combiner之后,Reduce输入的键值对数量降低了,提供了网络传输效率。


  • 📢博客主页:https://lansonli.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
  • 📢大数据系列文章会每天更新,停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-05-31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ​​​​​​​MapReuce的Combineer
    • 概念
      • ​​​​​​​实现步骤
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档