• Combiner合并


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

    Combiner组件的父类就是Reducer

    Combiner和Reducer的区别在于运行位置

    Combiner是在每一个MapTask所在的节点运行

    Reducer是接受全局所以Mapper的输出结果

    Combiner 的意义就是对每一个的输出结果进行汇总

     Combiner 能够应用的前提是不会影响业务逻辑

    如何自定义一个Combiner

    1. public class WordCountCombiner extends Reducer {
    2. private IntWritable outV = new IntWritable();
    3. @Override
    4. protected void reduce(Text key, Iterable values, Context context) throws IOException, InterruptedException {
    5. int sum = 0;
    6. for (IntWritable value : values) {
    7. sum += value.get();
    8. }
    9. outV.set(sum);
    10. context.write(key,outV);
    11. }
    12. }

    在Job中设置驱动

    job.setCombinerClass(WordCountCombiner.class);

    Combiner合并案例

     需求

    统计过程中对每一个MapTask的输出进行局部汇总,以减小网络传输量即采用Combiner功能。 

    数据输入

    hello.txt

    期望输出数据

      期望:Combine输入数据多,输出时经过合并,输出数据降低。

     添加一个

    1. import org.apache.hadoop.io.IntWritable;
    2. import org.apache.hadoop.io.Text;
    3. import org.apache.hadoop.mapreduce.Reducer;
    4. import java.io.IOException;
    5. public class WordCountCombiner extends Reducer {
    6. private IntWritable outV = new IntWritable();
    7. @Override
    8. protected void reduce(Text key, Iterable values, Context context) throws IOException, InterruptedException {
    9. int sum = 0;
    10. for (IntWritable value : values) {
    11. sum += value.get();
    12. }
    13. //封装outKV
    14. outV.set(sum);
    15. //写出outKV
    16. context.write(key,outV);
    17. }

    在Driver类中指定Combiner

    1. // 指定需要使用combiner,以及用哪个类作为combiner的逻辑
    2. job.setCombinerClass(WordCountCombiner.class);

    方案二:

    因为Combiner 是reducer的子类

    将WordCountReducer作为Combiner

    1. // 指定需要使用Combiner,以及用哪个类作为Combiner的逻辑
    2. job.setCombinerClass(WordCountReducer.class);

  • 相关阅读:
    MethodInterceptor
    c++ trivial, standard layout和POD类型解析
    C++-Mongoose(3)-http-server-https-restful
    为什么手机和电视ip地址不一样
    相关作业总结
    java 企业工程管理系统软件源码+Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis
    从零开始的LINUX(一)
    Python等比数列
    Flutter:文件与网络操作摘要
    Vue3-使用create-vue创建项目
  • 原文地址:https://blog.csdn.net/m0_65136138/article/details/126213345