千家信息网

Hadoop中使用Combiner有什么好处

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章主要介绍了Hadoop中使用Combiner有什么好处,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用Combiner好处:
千家信息网最后更新 2025年12月02日Hadoop中使用Combiner有什么好处

这篇文章主要介绍了Hadoop中使用Combiner有什么好处,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

使用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);        }    }}

感谢你能够认真阅读完这篇文章,希望小编分享的"Hadoop中使用Combiner有什么好处"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

输出 函数 任务 输入 数据 篇文章 好处 结果 传输 一致 作用 时间 低下 重要 一行 不用 之间 例子 兴趣 决不 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 腾讯的软件开发好吗 附加数据库没有数据库文件夹 常州金刚网络技术有限公司 服务器电源开关一直亮红色 山东省春考网络技术类 扬州职业大学网络技术专业就业 通信互联网科技公司工资 科技和互联网公司简介 网络安全宣传活动宣传语 数据库控制中授权的英文表示 成都流云网络技术有限公司 二年级上册网络安全绘画 2019软件开发语言排名 弘芯服务器 安徽智能软件开发配件 什么是数据库字段 软件开发工程师未来趋势 上海中国软件开发 重返帝国官方服务器怎么登录 手术导航系统软件开发知识 数据库原理岭南师范学院答案 青少年如何看待网络技术 网络安全专项工作会议 软件开发公司测试团队的优势 我的世界离线服务器登录不了 网络安全类网络工程 软件与信息服务跟软件开发一样吗 删除数据库定时任务 汽车行业软件开发审核标准 长宁区综合网络技术销售厂
0