hadoop中combiner函数的作用以及范例示例

作者: admin 分类: Hadoop 发布时间: 2018-02-27 18:12  阅读: 371 views

集群上的可用宽带限制了MapReduce作业的数量,因此尽量避免map和reduce任务之间的数据传输是有利的。Hadoop允许用户针对map任务的输出指定一个combiner(就像mapper和reducer一样)

combiner函数的输出作为reduce函数的输入[中间又多了一层关系]。由于combiner属于优化方案,所以Hadoop无法确定要对map任务输出记录调用多少次combiner(如果需要的)。也就是不管调用combiner多少次,reducer的输出结构都是一样的。

combiner的规则制约着可用的函数类型。但它能有效减少mapper和reducer之间的数据传输量,在MapReduce作业中使用combiner函数需要慎重考虑。

combiner是通过Reducer类来定义,改动需要注意的是Job中设置的combiner类。

代码示例

package test;

import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;


public class MaxTemperatureWithCombiner {
    public static void main(String[] args) throws Exception {
        if (args.length != 2) {
            System.err.println(
                "Usage: MaxTemperatureWithCombiner <input path> <output path>");
            System.exit(-1);
        }

        Job job = Job.getInstance();
        job.setJarByClass(MaxTemperatureWithCombiner.class);
        job.setJobName("Max temperature");

        FileInputFormat.addInputPath(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));

        job.setMapperClass(MaxTemperatureMapper.class);
        job.setCombinerClass(MaxTemperatureReducer.class);
        job.setReducerClass(MaxTemperatureReducer.class);

        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
}

 

这个程序无需修改就可以在完整的数据集上直接运行。这是MapReduce的优势:它可根据数据量的大小和硬件规模进行扩展。(延续这个范例和Java MapReduce程序实现分析历年的温度数据

Hadoop Streaming

Streaming 天生适合用于文本处理。map的输入数据通过标准输入流传递给map函数,并且是一行一行地传输,最后将结果行写到标准输出。map输出的键值对是以一个制表符分隔的行,并且写入标准输出reduce函数的输入格式与之相同并通过标准输入流进行传输。reduce函数从标准输入流中读物输入行,该输入已由Hadoop框架根据键排序,最后将结果写入标准输出。


   原创文章,转载请标明本文链接: hadoop中combiner函数的作用以及范例示例

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

更多阅读