博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hadoop中的Combiner(聚合)(10)
阅读量:7093 次
发布时间:2019-06-28

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

hot3.png

        使用Combiner好处

                           减少Mapper任务输出数据量,减少网络传输时间,减少整体Job运行时间。

        Combiner仅作用于单个Mapper任务,每个Map任务可能会产生大量的输出,Combiner的作用就是在Map端对输出先做一次合并,以减少传输到Reducer的数据量。

        Combiner最基本是实现本地Key的递归,Combiner具有类似本地的Reduce功能。如果不用Combiner,那么所有的结果都是Reduce完成,效率会相对低下,使用Combiner先完成的Map会在本地聚合,提升速度。

        注意:Combiner的输出时Reduce的输入,Combiner决不能改变最终的计算结果,所以从我的想法来看,Combiner只应该用于那种Reduce的输入key/value与输出key/value类型完成一致,且不影响最终结果的场景。比如累加,最大值等。

        为什么使用Combiner

                          集群上的可用宽带限制了MapReduce作业的数量,因此最重要的一点是尽量避免Map任务和Reduce任务之间的数据传输。

                          Hadoop允许用户针对Map任务的输出指定一个合并函数(Combiner)——————合并函数的输出作为Reduce函数的输入。

                            由于合并函数是一个优化方案,所以Hadoop无法确定针对Map任务输出中任一条记录需要调用多少次合并函数。换而言之,不管调用合并函数多少次,Reduce的输出结构都是一致的。

例子:package combiner;import java.io.IOException;import java.net.URI;import java.net.URISyntaxException;import mapreduce.MyMapper;import mapreduce.MyReducer;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.LongWritable;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.input.TextInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;import org.apache.hadoop.mapreduce.lib.partition.HashPartitioner;/** * 计算单词 * @author Xr * */public class WordCountApp {    private static final String INPUT_PATH = "hdfs://hadoop:9000/hello";    private static final String OUTPUT_PATH = "hdfs://hadoop:9000/hello1";    public static void main(String[] args)throws Exception {        Configuration conf = new Configuration();        //判处是否存在输入目录        existsFile(conf);        Job job = new Job(conf,WordCountApp.class.getName());                //1.1    从哪里读取数据        FileInputFormat.setInputPaths(job, INPUT_PATH);        //把输入文本中的每一行解析成一个个键值对        job.setInputFormatClass(TextInputFormat.class);                //1.2    设置自定义map函数        job.setMapperClass(MyMapper.class);        job.setMapOutputKeyClass(Text.class);        job.setMapOutputValueClass(LongWritable.class);                //1.3    分区        job.setPartitionerClass(HashPartitioner.class);        job.setNumReduceTasks(1);                //1.4    TODO    排序分组        //1.5    规约        job.setCombinerClass(MyReducer.class);                //2.1    是框架做的,不需要程序员手工干预。        //2.2    自定义reducer函数        job.setReducerClass(MyReducer.class);        job.setOutputKeyClass(Text.class);        job.setOutputValueClass(LongWritable.class);                //2.3    写入到HDFS中        FileOutputFormat.setOutputPath(job, new Path(OUTPUT_PATH));        //格式化类        job.setOutputFormatClass(TextOutputFormat.class);                //提交给JobTracker去执行        job.waitForCompletion(true);    }    private static void existsFile(Configuration conf) throws IOException,            URISyntaxException {        FileSystem fs = FileSystem.get(new URI(INPUT_PATH), conf);        if(fs.exists(new Path(OUTPUT_PATH))){            fs.delete(new Path(OUTPUT_PATH), true);        }    }}

                                                                                                                                Name:Xr

                                                                                                                                Date:2014-03-02 21:41

转载于:https://my.oschina.net/Xiao629/blog/204438

你可能感兴趣的文章
js metro仿win8卡片效果
查看>>
我的友情链接
查看>>
Samba服务器的配置 , nfs配置解析
查看>>
Android Selector 与 Shape 基本用法
查看>>
通信工程师互联网技术数据库系统概述
查看>>
使用脚本实现自动化建立小Linux与命令移植
查看>>
rman差异增量及累积增量的区别
查看>>
glide
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
document.body属性
查看>>
诚聘Java高级开发工程师
查看>>
linux 下查看登陆用户
查看>>
趁热来一发——关于避免死锁时测试结果颠覆三观不得不思考虫生这件小事
查看>>
我的友情链接
查看>>
人脉通分享工能,点击分享到微信或者qq的分享链接打开H5,提示用户用浏览器打开,点击下载,有有app...
查看>>
Java:String和Date、Timestamp之间的转换
查看>>
Mongodb概述
查看>>
yii 安全措施 (Security)
查看>>
性能监测与优化命令top
查看>>