十三:Combiners是什么?作用是什么?编程实现

Combiners编程

1.每一个map会产生大量的输出,combiner的作用就是在map端对输出,先做一次合并,以减少传输到reducer的数据量.

2.combiner最基本是实现本地key的归并,具有类似本地reduce功能如果不用combiner,那么所有的结果都是reduce完成,效率会相对      降低

3.使用combiner,先完成的map会在本地聚合,提升速度.

combiner阶段是可以选择的,combiner其实也是一种reduce操作,因此我们看见WordCount类里是用reduce进行加载的。Combiner是一个本地化的reduce操作,它是map运算的后续操作,主要是在map计算出中间文件前做一个简单的合并重复key值的操作,例如我们对文件里的单词频率做统计,map计算时候如果碰到一个hadoop的单词就会记录为1,但是这篇文章里hadoop可能会出现n多次,那么map输出文件冗余就会很多,因此在reduce计算前对相同的key做一个合并操作,那么文件会变小,这样就提高了宽带的传输效率,毕竟hadoop计算力宽带资源往往是计算的瓶颈也是最为宝贵的资源,但是combiner操作是有风险的,使用它的原则是combiner的输入不会影响到reduce计算的最终输入,例如:如果计算只是求总数,最大值,最小值可以使用combiner,但是做平均值计算使用combiner的话,最终的reduce计算结果就会出错。

代码实现:

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

public class WordcountCombiner extends Reducer<Text, IntWritable, Text, LongWritable> {

	@Override
	protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {

		long count = 0;
		// 迭代所有的value,进行累加
		for (IntWritable value : values) {

			count += value.get();

		}

		// 再将这个key及其汇总value-count输出
		context.write(key, new LongWritable(count));
	}
}

在mian方法中加入代码实现:

public static void main(String[] args) throws Exception {

		Configuration conf = new Configuration();

		// 创建一个job对象来组装我们这个wordcount程序
		Job wcjob = Job.getInstance(conf);

		/**
		 * 加入一个combiner组件
		 */
//		wcjob.setCombinerClass(WordcountCombiner.class);
		wcjob.setCombinerClass(WordCountReducer.class);
		}
	}

第11行和12行意思是一样的只不过在CombinerClass调用的Reduce是在maptaks 本地运行 Combiner继承了reduce所以两者怎么写都行

时间: 2024-10-29 19:11:15

十三:Combiners是什么?作用是什么?编程实现的相关文章

走入计算机的第三十三天(异常处理和scoket编程)

一 异常处理 1 异常和错误,而错误分成了两种 一是语法错误,这种错误过不了解释器的检测,必须要在执行前改正 二是逻辑错误,在执行的时候检测出了错误. 2 什么是异常:异常就是程序在运行是产生的错误信息. 3 异常的种类 python3中不同的异常分为不同的类型,用不同的类型去标识.不同的类型对象错误都有相对应的标识语法. AssertionErr: 断言语句失败:关键字后边的条件为假的时候,程序将 停止并抛出AssertionError异常,语句一般是在测试程序的时候用于在代码中置入的检查点.

十三、Python高级功能之面向对象编程

Python高级功能之面向对象编程(类和对象) 一.类和对象: 面向过程和面向对象的编程 面向过程的编程:函数式编程,C程序等 面向对象的编程:C++,Java,Python等 类和对象:是面向对象中的两个重要概念 类:是对事物的抽象,比如:汽车模型 对象:是类的一个实例,比如:QQ轿车.大客车 范例说明: 汽车模型可以对汽车的特征和行为进行抽象,然后可以实例话为一台真实的汽车实体出来 二.Python类定义 Python类的定义: 使用class关键字定义一个类,并且类名的首字母要大写: 当程

轻松学习JavaScript十八:DOM编程学习之DOM简单介绍

一DOM概述 DOM(文档对象模型)是HTML和XML的应用程序接口(API).DOM将把整个页面规划成由节点层级构成的文档. DOM描绘了一个层次化的节点树,执行开发者加入,移除和改动页面的某一部分. HTML或XML页面的每一个部分都 是一个节点的衍生物. 通过DOM.可訪问HTML文档的全部元素. 当网页被载入时.浏览器会创建页面的文档对象模 型,DOM模型被构造为对象的树. DOM是W3C(万维网联盟)的标准.DOM定义了訪问HTML和XML文档的标准."W3C 文档对象模型(DOM)是

初创公司找不到公司文化及创新力?来一口编程马拉松如何

编者注: 本文来自Uber的技术总监Pedram Keyani的一篇博文,中文版由天地会珠海分舵进行编译.全文以Facebook为例子作为切入点,描述了在互联网和软件公司中,编程马拉松是如何起到了塑造公司文化并催生创新的作用的. 编程马拉松打造公司文化 对于我个人来说,我是非常热衷于编程马拉松的.这就是为什么过去在Facebook的7年时间里我组织举办了将近40场编程马拉松的原因.一开始的时候,我之所以这样做主要是因为我喜欢在工作之余和其他同僚一起抛开所有条条框,无拘无俗的,天马行空的为代码挥洒

面对对象编程

面向对象编程 标签(空格分隔): python 基础 --- 面向过程:根据业务逻辑从上到下写代码面向对象:将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程 面向对象(object-oriented ;简称: OO) 至今还没有统一的概念 我这里把它定义为: 按人们 认识客观世界的系统思维方式,采用基于对象(实体) 的概念建立模型,模拟客观世界分析.设 计.实现软件的办法. 面向对象编程(Object Oriented Programming-OOP) 是一种

9&#183;12 作

1.什么是RUP? 答:RUP(Rational Unified Process,统一软件开发过程,统一软件过程)是一个面向对象且基于网络的程序开发方法论.根据Rational(Rational Rose和统一建模语言的开发者)的说法,好像一个在线的指导者,它可以为所有方面和层次的程序开发提供指导方针,模版以及事例支持. RUP和类似的产品--例如面向对象的软件过程(OOSP),以及OPEN Process都是理解性的软件工程工具--把开发中面向过程的方面(例如定义的阶段,技术和实践)和其他开发

java中接口中成员的定义

java中的接口的作用是提供编程框架,它作为统一的规范让其他类进行扩展,是java中非常优秀的设计. 这娃用以下代码总结了java中接口可以定义的成员以及它们默认被修饰的关键字: //外部接口的访问修饰符只能是public或默认修饰符 ,并且它的成员只能用public访问修饰符修饰, 接口不能用final修饰 public interface A { //成员变量,默认用public static final 修饰 String name="ahei"; //成员方法,默认用publi

六、Python函数

Python函数 一.函数 函数就是完成特定功能的一个语句组,这组语句可以作为一个单位使用,并且给它取一个名字 可以通过函数名在程序的不同的地方多次执行(这通常叫做函数调用),却不需要在所有地方都重复编写这些语句 自定义函数和预定义函数 函数作用:降低编程的难度.代码重用 当我们自己定义一个函数时,通常使用def语句 def 函数名(参数列表): #可以没有参数 函数体 #!/usr/bin/python a = int(raw_input("please enter a number:&quo

编写DLL所学所思(2)——导出类

2011.10.6 烛秋             http://www.cnblogs.com/cswuyg/archive/2011/10/06/DLL2.html 一.导出类的简单方式 这种方式是比较简单的,同时也是不建议采用的不合适方式. 只需要在导出类加上__declspec(dllexport),就可以实现导出类.对象空间还是在使用者的模块里,dll只提供类中的函数代码.不足的地方是:使用者需要知道整个类的实现,包括基类.类中成员对象,也就是说所有跟导出类相关的东西,使用者都要知道.通