Hadoop读书笔记系列文章:http://blog.csdn.net/caicongyang/article/category/2166855
1.combiner
问:什么是combiner:
答:Combiner发生在Mapper端,对数据进行归约处理,使传到reducer端的数据变小了,传输时间变端,作业时间变短,Combiner不能夸Mapper执行,(只有reduce可以接受多个Mapper的任务)。并不是所有的算法都适合归约处理,例如求平均数
2.代码实现
WordCount.java
package combine; import java.io.IOException; import java.net.URI; 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.Mapper; import org.apache.hadoop.mapreduce.Reducer; 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; /** * * <p> * Title: WordCount.java * Package counter * </p> * <p> * Description: * 问:什么是combiner: * 答:Combiner发生在Mapper端,对数据进行归约处理,使传到reducer端的数据变小了,传输时间变端,作业时间变短,Combiner不能夸Mapper执行, * (只有reduce可以接受多个Mapper的任务)并不是多少的算法都适合归约处理,例如求平均数 * * <p> * @author Tom.Cai * @created 2014-11-26 下午10:47:32 * @version V1.0 * */ public class WordCount { private static final String INPUT_PATH = "hdfs://192.168.80.100:9000/hello"; private static final String OUT_PATH = "hdfs://192.168.80.100:9000/out"; public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); FileSystem fileSystem = FileSystem.get(new URI(INPUT_PATH), conf); Path outPath = new Path(OUT_PATH); if (fileSystem.exists(outPath)) { fileSystem.delete(outPath, true); } Job job = new Job(conf, WordCount.class.getSimpleName()); //1.1设定输入文件 FileInputFormat.setInputPaths(job, INPUT_PATH); //1.2设定输入格式 job.setInputFormatClass(TextInputFormat.class); //指定自定义Mapper类 job.setMapperClass(MyMapper.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(LongWritable.class); //1.3设定分区 job.setPartitionerClass(HashPartitioner.class); job.setNumReduceTasks(1); //1.4排序分组 //1.5归约 job.setCombinerClass(MyReducer.class); //2.2设定Reduce类 job.setReducerClass(MyReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(LongWritable.class); //2.3指定输出地址 FileOutputFormat.setOutputPath(job, new Path(OUT_PATH)); job.setOutputFormatClass(TextOutputFormat.class); job.waitForCompletion(true); } static class MyMapper extends Mapper<LongWritable, Text, Text, LongWritable> { @Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String[] splited = value.toString().split("\t"); for (String word : splited) { context.write(new Text(word), new LongWritable(1)); } } } static class MyReducer extends Reducer<Text, LongWritable, Text, LongWritable> { @Override protected void reduce(Text key, Iterable<LongWritable> value, Context context) throws IOException, InterruptedException { long count = 0L; for (LongWritable times : value) { count += times.get(); } context.write(key, new LongWritable(count)); } } }
</pre><p></p><pre>
3.加入Combiner后的计数器:
14/12/01 21:26:41 INFO mapred.JobClient: Counters: 19
14/12/01 21:26:41 INFO mapred.JobClient: File Output Format Counters
14/12/01 21:26:41 INFO mapred.JobClient: Bytes Written=20
14/12/01 21:26:41 INFO mapred.JobClient: FileSystemCounters
14/12/01 21:26:41 INFO mapred.JobClient: FILE_BYTES_READ=346
14/12/01 21:26:41 INFO mapred.JobClient: HDFS_BYTES_READ=40
14/12/01 21:26:41 INFO mapred.JobClient: FILE_BYTES_WRITTEN=128546
14/12/01 21:26:41 INFO mapred.JobClient: HDFS_BYTES_WRITTEN=20
14/12/01 21:26:41 INFO mapred.JobClient: File Input Format Counters
14/12/01 21:26:41 INFO mapred.JobClient: Bytes Read=20
14/12/01 21:26:41 INFO mapred.JobClient: Map-Reduce Framework
14/12/01 21:26:41 INFO mapred.JobClient: Map output materialized bytes=50
14/12/01 21:26:41 INFO mapred.JobClient: Map input records=2
14/12/01 21:26:41 INFO mapred.JobClient: Reduce shuffle bytes=0
14/12/01 21:26:41 INFO mapred.JobClient: Spilled Records=6
14/12/01 21:26:41 INFO mapred.JobClient: Map output bytes=52
14/12/01 21:26:41 INFO mapred.JobClient: Total committed heap usage (bytes)=532807680
14/12/01 21:26:41 INFO mapred.JobClient: SPLIT_RAW_BYTES=97
14/12/01 21:26:41 INFO mapred.JobClient: Combine input records=4
14/12/01 21:26:41 INFO mapred.JobClient: Reduce input records=3
14/12/01 21:26:41 INFO mapred.JobClient: Reduce input groups=3
14/12/01 21:26:41 INFO mapred.JobClient: Combine output records=3
14/12/01 21:26:41 INFO mapred.JobClient: Reduce output records=3
14/12/01 21:26:41 INFO mapred.JobClient: Map output records=4
4.未加入归约之前的计数器
14/12/01 21:35:27 INFO mapred.JobClient: Counters: 19
14/12/01 21:35:27 INFO mapred.JobClient: File Output Format Counters
14/12/01 21:35:27 INFO mapred.JobClient: Bytes Written=20
14/12/01 21:35:27 INFO mapred.JobClient: FileSystemCounters
14/12/01 21:35:27 INFO mapred.JobClient: FILE_BYTES_READ=362
14/12/01 21:35:27 INFO mapred.JobClient: HDFS_BYTES_READ=40
14/12/01 21:35:27 INFO mapred.JobClient: FILE_BYTES_WRITTEN=128090
14/12/01 21:35:27 INFO mapred.JobClient: HDFS_BYTES_WRITTEN=20
14/12/01 21:35:27 INFO mapred.JobClient: File Input Format Counters
14/12/01 21:35:27 INFO mapred.JobClient: Bytes Read=20
14/12/01 21:35:27 INFO mapred.JobClient: Map-Reduce Framework
14/12/01 21:35:27 INFO mapred.JobClient: Map output materialized bytes=66
14/12/01 21:35:27 INFO mapred.JobClient: Map input records=2
14/12/01 21:35:27 INFO mapred.JobClient: Reduce shuffle bytes=0
14/12/01 21:35:27 INFO mapred.JobClient: Spilled Records=8
14/12/01 21:35:27 INFO mapred.JobClient: Map output bytes=52
14/12/01 21:35:27 INFO mapred.JobClient: Total committed heap usage (bytes)=366034944
14/12/01 21:35:27 INFO mapred.JobClient: SPLIT_RAW_BYTES=97
14/12/01 21:35:27 INFO mapred.JobClient: Combine input records=0
14/12/01 21:35:27 INFO mapred.JobClient: Reduce input records=4
14/12/01 21:35:27 INFO mapred.JobClient: Reduce input groups=3
14/12/01 21:35:27 INFO mapred.JobClient: Combine output records=0
14/12/01 21:35:27 INFO mapred.JobClient: Reduce output records=3
14/12/01 21:35:27 INFO mapred.JobClient: Map output records=4
5.总结
从前后两个计数器输出可以看到:加了归约以后Reduce input records从4变成了3,从Mapper端到Reduce端的作业变少了,传输时间变少了,从而提升了整体的作业时间。
欢迎大家一起讨论学习!
有用的自己收!
记录与分享,让你我共成长!欢迎查看我的其他博客;我的博客地址:http://blog.csdn.net/caicongyang
相关推荐
《Hadoop学习笔记》 Hadoop,作为大数据处理的核心框架,是开源社区的杰作,由Apache软件基金会维护。这份文档旨在深入解析Hadoop的基本概念、架构及其在大数据处理中的应用,帮助读者全面掌握这一重要技术。 一、...
《基于MapReduce的词频统计程序及其重构与MapReduce编程中的Combiner、Partitioner组件应用》 在当今大数据处理的领域中,Hadoop作为分布式计算框架的重要代表,以其高效、可扩展的特性受到了广泛关注。尤其在人工...
本文通过对Hadoop MapReduce的核心原理及其源代码的分析,帮助读者深入理解MapReduce的工作机制。 #### 二、Hadoop MapReduce概述 Hadoop MapReduce是一种分布式计算模型,用于处理和生成大型数据集。它将大规模...
它的设计灵感来源于函数式编程语言中的映射(Map)和归约(Reduce)概念,使得开发者可以方便地编写分布式应用程序,处理存储在Hadoop分布式文件系统(HDFS)上的海量数据。 ### 1. MapReduce编程过程 MapReduce的...
同时,许多基于Hadoop生态系统的工具和技术都是围绕MapReduce构建的,这使得MapReduce成为了理解大数据处理领域不可或缺的一部分。 #### 七、总结 MapReduce作为一种高效、可靠的分布式计算模型,为解决大规模数据...
这些JAR文件通常可以从Hadoop的lib目录中获取,包含MapReduce库和其他依赖。 接下来,我们可以开始编写MapReduce程序。除了基本的Map和Reduce函数,我们可能需要自定义逻辑来处理更复杂的数据处理需求。例如,如果...
### Hadoop MapReduce Cookbook知识点概览 #### 一、Hadoop MapReduce简介 - **定义与功能**:Hadoop MapReduce是一种编程模型,用于处理和生成大数据集,它通过一个并行、分布式算法来实现这一目标。MapReduce将...
### MapReduce原理及操作知识点详解 #### 一、环境配置与说明 在开始了解MapReduce的具体原理之前,首先需要确保有一个合适的环境来进行实践。本课程使用的环境为: - **操作系统**:CentOS 6.6 64位,单核,1G...
MapReduce是一种编程模型,主要设计用于处理和生成大型数据集,尤其适合大数据处理场景。...尽管后来出现了Hadoop等基于MapReduce的开源框架,MapReduce的核心思想和模式仍然在大数据处理领域发挥着重要作用。
书籍中深入讨论了Hadoop内部的多个组件,如HDFS如何工作,以及MapReduce的数据流,包括Combiner函数的使用等。此外,还介绍了如何配置和运行分布式MapReduce作业,这为读者提供了深入了解Hadoop内部工作机制的机会。...
从给定的文件信息来看,文章主要围绕Hadoop及其核心组件MapReduce展开,详细阐述了MapReduce的概念、设计思路、模型实现、产生的问题以及编程实现和应用等方面。下面,我们将深入探讨这些知识点。 ### 思想起源 ...
根据提供的文件信息,我们可以从标题、描述以及标签中提炼出几个关键的知识点: ### Hadoop基础知识 1. **Hadoop简介**:Hadoop是一个能够对大量数据进行分布式处理的软件框架,它使得开发者可以在简单的硬件上...
在本篇中,我们将深入探讨如何使用Hadoop MapReduce编程模型来计算网页之间的PageRank值。PageRank是Google搜索引擎算法的核心部分,它通过衡量网页之间的链接关系来评估每个网页的重要性。在Hadoop环境下,我们可以...
MapReduce模型是大数据处理领域中一种重要的...正确理解和使用Combiner对于优化Hadoop MapReduce作业至关重要。在实际应用中,开发者需要根据具体的场景和需求来决定是否需要使用Combiner以及如何实现Combiner逻辑。
从输入数据到最终输出,整个过程经过了多个阶段的处理,包括映射、排序、归约等。 **Combiner函数:** 为了减少网络传输量和提高效率,在某些情况下可以在Map阶段结束后立即使用Combiner函数对键值对进行局部聚合...
在Hadoop源码中,`org.apache.hadoop.mapred`和`org.apache.hadoop.mapreduce`包下包含了MapReduce的相关类和接口。例如,`MapReduceBase`是许多关键组件的基类,`JobConf`用于配置作业,`InputFormat`和`...