`

MapReduce中自定义Combiner

 
阅读更多

 以下作为自己的学习记录。

1 MapReduce中数据的整个处理流程。

 

  Map输出数据->key排序并且计算partintion->Map本地所有数据数据Combiner->

shuffle中的自定义排序->自定义分组->reduce中数据汇总

例子:

一、 自定义Combiner使用

1 自定义Combiner

  

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
public class MyCombiner extends Reducer<Text, LongWritable, Text, LongWritable> {
	
	protected void reduce( Text key, Iterable<LongWritable> values, Context context) throws java.io.IOException, InterruptedException {
		
		// 显示次数表示规约函数被调用了多少次,表示k2有多少个分组
		System.out.println("Combiner输入分组<" + key.toString() + ",N(N>=1)>");
		long count = 0L;
		for (LongWritable value : values) {
			count += value.get();
			// 显示次数表示输入的k2,v2的键值对数量
			System.out.println("Combiner输入键值对<" + key.toString() + "," + value.get() + ">"+this);
		}
		context.write(key, new LongWritable(count));
		// 显示次数表示输出的k2,v2的键值对数量
		System.out.println("Combiner输出键值对<" + key.toString() + "," + count + ">");
	};
}

 2  主类的使用

 

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
public class MyCombiner extends Reducer<Text, LongWritable, Text, LongWritable> {
	
	protected void reduce( Text key, Iterable<LongWritable> values, Context context) throws java.io.IOException, InterruptedException {
		
		// 显示次数表示规约函数被调用了多少次,表示k2有多少个分组
		System.out.println("Combiner输入分组<" + key.toString() + ",N(N>=1)>");
		long count = 0L;
		for (LongWritable value : values) {
			count += value.get();
			// 显示次数表示输入的k2,v2的键值对数量
			System.out.println("Combiner输入键值对<" + key.toString() + "," + value.get() + ">"+this);
		}
		context.write(key, new LongWritable(count));
		// 显示次数表示输出的k2,v2的键值对数量
		System.out.println("Combiner输出键值对<" + key.toString() + "," + count + ">");
	};
}

 

3 自定义Partition

  

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Partitioner;

 

public class MyPartintioner extends Partitioner<Text, LongWritable>{
 
	/**
	 * key map输出的key
	 * value map 输出的value 
	 */
	@Override
	public int getPartition(Text key, LongWritable value, int numPartitions) {
		
//		   System.out.println("--------enter DefinedPartition flag--------"); 
	        /** 
	        * 注意:这里采用默认的hash分区实现方法 
	        * 根据组合键的第一个值作为分区 
	        * 这里需要说明一下,如果不自定义分区的话,mapreduce框架会根据默认的hash分区方法, 
	        * 将整个组合将相等的分到一个分区中,这样的话显然不是我们要的效果 
	        */
//		   System.out.println(key+ "--------out DefinedPartition flag--------"+ value );
			System.out.println("Partitioner  key:"+key+"  value:"+value+"  "+ ( ( key.hashCode()&Integer.MAX_VALUE)%numPartitions ) +"   "+this);
	       return ( key.hashCode()&Integer.MAX_VALUE)%numPartitions; 
	}
	
}

 

 

 

分享到:
评论

相关推荐

    mapreduce二次排序

    在分布式计算领域,MapReduce是一种广泛使用的编程模型,尤其在大数据处理中发挥着核心作用。...通过自定义Combiner、Partitioner和Comparator,我们可以精确控制数据的排序和处理方式,从而更好地适应各种业务场景。

    MapReduce平台优化详解.pdf

    Combiner是MapReduce中的一种特殊组件,位于Mapper和Reducer之间,负责对Mapper的输出结果进行局部聚合处理。Combiner可以减少Map Task输出的数据量和Shuffle网络传输的数据量,提高MapReduce作业的执行效率。...

    MapReduce求行平均值--MapReduce案例

    本案例主要探讨如何使用MapReduce来求取数据集的行平均值,这在数据分析、数据挖掘以及日志分析等场景中非常常见。我们将讨论四种不同的方法来实现这一目标,针对已处理(包含行号)和未处理的数据集。 首先,我们...

    mapreduce项目 数据清洗

    在MapReduce中,数据清洗通常在Map阶段进行,通过自定义的mapper函数实现。例如,可以检查并处理缺失的家族关系信息,或者去除无效的角色标签。此外,如果存在重复的个人记录,可以通过比较键值对来消除它们。 3. *...

    mapreduce高级特性及shuffle

    1.shuffle机制详细讲解 2.MR案例多文件输出 3.MR案例partition使用 4.MR案例内容去重 5.MR案例敏感词汇过滤 6.MR案例自定义combiner的使用 7.MR案例倒排序索引 8.MR案例简单排序

    MapReduce高阶实现

    - **Combiner优化**:Combiner是MapReduce中的一个可选组件,它可以在Map阶段就对局部结果进行部分聚合,减少网络传输的数据量,提高整体性能。 - **MapReduce库的扩展**:通过自定义InputFormat、OutputFormat、...

    MapReduce模型--Map端Combiners聚合

    在MapReduce框架中,Combiner(组合器)是一个可选的组件,用于对Map输出的数据进行局部合并,以减少数据传输量和提高整体处理效率。Combiner的使用可以在Map端进行局部的数据聚合处理,避免了大量中间数据直接传输...

    Hadoop MapReduce Cookbook 源码

    MapReduce是大数据处理领域中的核心组件,尤其在处理大规模分布式数据集时,它的重要性不言而喻。本书以实例驱动的方式,将复杂的理论知识转化为可操作的代码,使学习过程更加生动有趣。 首先,我们要理解MapReduce...

    Hadoop MapReduce实战手册(完整版)

    书中还可能涵盖了MapReduce编程模型,包括自定义Mapper和Reducer类,以及Combiner和Partitioner的使用。Combiner可以在本地节点上提前减少数据传输,提高效率;Partitioner则控制中间结果发送到哪个Reducer,通常...

    MapReduce2.0程序设计多语言编程(理论+实践)

    3. **性能优化**:在实践中,我们还需要考虑如何优化MapReduce作业,包括合理使用Combiner减少网络传输,设置合适的分区策略以平衡负载,以及使用本地化数据处理来提升效率。 4. **错误处理和调试**:MapReduce作业...

    大数据mapreduce案例

    除了基本的MapReduce模型,还有一些优化策略可以提高性能,例如Combiner(本地化Reduce)、Partitioner(自定义分区)和Secondary Sort(二次排序)等。这些技巧可以在不改变最终结果的情况下,减少数据传输量,提高...

    一个MapReduce简单程序示例

    Combiner是MapReduce中的一个优化策略,它可以在Reduce之前对Map的输出进行局部聚合。在上述示例中,可能已经在Map阶段使用了Combiner来减少数据传输量,提高整体性能。 总结来说,MapReduce是处理大数据的关键工具...

    combiner.zip

    在Hadoop中,可以通过设置job.setCombinerClass()指定自定义的Combiner类。 6. **限制与注意事项**:并不是所有的情况都适合使用Combiner。对于依赖全局状态或者顺序的计算,如计算最长公共子序列、找出最近邻等,...

    hadoop 框架下 mapreduce源码例子 wordcount

    WordCount只是一个基础示例,实际应用中可以进行优化,例如使用Combiner减少网络传输的数据量,或者实现自定义分区策略来改进数据分布。此外,WordCount可以作为其他复杂分析任务的基础,如情感分析、关键词提取等...

    MapReduce 中文版论文

    - MapReduce 的设计受到了函数式编程语言中 Map 和 Reduce 操作的启发,并且与其他并行处理框架相比,它更易于使用和部署。 #### 八、结论 - MapReduce 是一个强大的工具,它简化了并行计算的复杂性,使普通程序员...

    MapReduce2.0源码分析与实战编程

    本章讨论MapReduce性能优化的策略,如Combiner的使用、分区策略调整、数据本地性和 speculative tasks。优化MapReduce作业可以显著提高大数据处理的效率和资源利用率。 第7章:实战编程案例 这一章提供了一些实际的...

    hadoop-mapreduce

    这个项目是一个学习Hadoop MapReduce的实践项目,利用Maven构建,无需单独安装Hadoop环境,只需在IDE中打开即可运行,方便初学者进行快速上手和实践。 MapReduce的工作原理分为两个主要阶段:Map阶段和Reduce阶段。...

    005_hadoop中MapReduce详解_2

    在Hadoop生态系统中,MapReduce是一种分布式计算框架,它允许我们处理海量数据并行化,非常适合大规模数据集的处理。本文将深入解析MapReduce的工作原理、核心组件以及如何编写一个基本的MapReduce程序。 MapReduce...

    Hadoop应用系列2--MapReduce原理浅析(上)

    在IT行业中,分布式计算系统是处理大规模数据的关键技术之一,而Hadoop作为开源的分布式计算框架,其核心组件MapReduce则是实现这一目标的重要工具。本文将深入浅出地解析MapReduce的工作原理,帮助读者理解这一强大...

    使用MapReduce对数据文件进行切分

    在实际应用中,我们可能需要自定义MapReduce的逻辑,例如编写Mapper和Reducer类,来处理特定的数据格式和业务需求。Mapper类定义了如何将输入数据转化为键值对,而Reducer类定义了如何处理这些键值对以生成最终结果...

Global site tag (gtag.js) - Google Analytics