Hadoop里的Partitioner和Combiner两个阶段

人们对于Mapreduce程序刚开始时都认为只需要一个reduce就够了。毕竟,在你处理数据之前一个reducer已经把数据都分好类了,有谁不喜欢分好类的数据呢。但是这样我们就忽略了并行计算的优势。如果只有一个reducer,我们的云计算就退化成了一个小雨点。

在多个reducer的情况下,我们需要某种机制来控制mapper的结果的分配问题。这是就Partitioner的工作了。

在默认情况下,hadoop通过比较key的hash值来分配,默认使用HashPartitioner。

有时默认的功能不能满足我们的要求,比如我们以前自定义的Edge类(http://blog.csdn.net/on_way_/article/details/8589187)。当我们想要知道每个机场乘客起飞的数量时。我们有如下数据

(北京, 上海)   张三

(北京, 青岛)  李四。。。。。。。

如果我们用HashPartitioner来分配,那么这两行就会被送往不同的reducer上,机场起飞的数量就会被算两次,而且每次都是错误的。

我们需要为我们的应用程序定制一个partitioner。

import org.apache.hadoop.io.Writable;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.Partitioner;

public class EdgePartitioner implements Partitioner<Edge, Writable>{

	@Override
	public void configure(JobConf job) {
		// TODO Auto-generated method stub

	}

	@Override
	public int getPartition(Edge key, Writable value, int numPartitions) {
		// TODO Auto-generated method stub
		return key.getDepartureNode().hashCode() % numPartitions;
	}

}

在map和reduce两个阶段之间,一个MapReduce程序必须把mapper的输出分配到多个reducer上,这个过程叫做shuffling,因为一个mapper的输出结果有可能被分配到集群中的多个节点中去。

Combiner----local reduce

在有些情况下,我们希望在分配mapper的结果之前进行一次“local reduce”。比如WordCount程序,我们在处理完一个文档之后得到了“the”1000次,it much more efficient to store and shuffle the pair("the",574) once instread of the pair("the",1) multiple times.这个过程就叫做combiner。今天先简单介绍一下combiner,以后会自己详解。

时间: 2024-12-11 01:49:01

Hadoop里的Partitioner和Combiner两个阶段的相关文章

hadoop里运行mapReduce出错

问题描述 hadoop里运行mapReduce出错 hadoop里用mapReduce分析一本不到4M的小说数据,在hadoop里运行,运行了将近一个半小时才运行完,但是指出来一个_temporary的文件,还报错,java代码是没有问题的, 解决方案 Hadoop--MapReduce运行处理流程

数据库-navicat for oracle里报表和计划这两个是按钮是什么功能?

问题描述 navicat for oracle里报表和计划这两个是按钮是什么功能? 开发"> 表 查看当前数据库的表 试图 相当于临时表 函数 在Oracle里写的程序 数据泵 导入导出数据 查询 写SQL语句 报表 ? 计划 ? 模型 创建数据库模型,可以形成SQL 解决方案 报表 对数据进行统计 计划 定时的任务

求和-如何将两个字符数组里的数字相加得出两组数的和

问题描述 如何将两个字符数组里的数字相加得出两组数的和 char a[1000],b[1000] 两个数组里都是数字 解决方案 void Add(char a[],char b[],char d[]) { char c[10001]; int lena=strlen(a),lenb=strlen(b); int i,j,len; len=lena>lenb?lena:lenb; len++; c[0]=''; for(i=1;i<=len;i++)c[i]='0'; for(i=1;i<

hadoop里运行reduce出错

问题描述 hadoop里运行reduce出错 hadoop里用mapReduce分析一本不到4M的小说数据,在hadoop里运行,运行了将近一个半小时才运行完,但是指出来一个_temporary的文件,还报错,java代码是没有问题的,

linux-内核引导为什么分为两个阶段?一个阶段不行吗?

问题描述 内核引导为什么分为两个阶段?一个阶段不行吗? 本人新手,最近看了linux启动流程---系统启动引导分为两个阶段,固化代码 (BIOS或者ROM)把第一阶段引导程序加载到RAM中并执行,第一阶段引导程序作用是加载第二阶段的引导程序到RAM. 请问,直接加载第二阶段的引导程序不可以吗?为什么要多一次加载呢? 解决方案 第一段时硬件的初始化,第二段是操作系统的初始化. 如果只有第二段引导,那么操作系统不仅需要能识别/初始化市面上所有的硬件,还要随着新硬件的上市同步发布新版本.--谁受得了!

拔高网络营销技能必须达到的两个阶段

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 现在的做网络营销技术或者渠道相对比较透明,大家采取的方法方式在一定程度上都是类似的,大同小异,所以笔者认为衡量一个网络营销工作者的技能和水 平达到了一个什么程度,更多的要用一个策划者或者说是决策者的角色来评定,而不能总是停留在执行的层面.想要真正拔高自身的网络营销技能,必须实现以下这 两个阶段. 一,钻研对手的营销技巧 一个网站一个企业发展到

智能音箱背后的“声优”:一百多人里挑出一个声音 两个月录了20万字

第一次见到钰莹的时候,她正在海天瑞声的录音间里拍摄工作场景. 齐肩的短发,粉红色的长裙,周身被录音间里的暖色光所包围.在一切准备完毕后,她朝着镜头比着"OK"的手势,笑的很甜. 百里挑一的"我在,你说" 7月5日,阿里推出的智能音箱"天猫精灵X1"在北京时间博物馆举行了一场发布会.在此之前,阿里人工智能实验室给媒体们寄送了一个特别的邀请函:一个黑色扁平的圆片,上面印有"未来,开口即来"的字样,并装有一个按钮,按下去后会发出温柔

Hadoop YARN中内存和CPU两种资源的调度和隔离

同时支持内存和CPU两种资源的调度(默认只支持内存,如果想进一步调度CPU,需要自己进行一些配置),本文将介绍Hadoop YARN是如何对这些资源进行调度和隔离的. 在YARN中,资源管理由ResourceManager和NodeManager共同完成,其中,ResourceManager中的调度器负责 资源的分配,而NodeManager则负责资源的供给和隔离.ResourceManager将某个NodeManager上资源分配给任务(这就是所 谓的"http://www.aliyun.co

一个表单里的同一个按钮提交两个页面,

提示:您可以先修改部分代码再运行 <script language="JavaScript"> function testform(){ window.open('','t1'); form1.action='1.htm'; form1.target='t1'; form1.submit(); window.open('','t2'); form1.action='2.htm'; form1.target='t2'; form1.submit(); window.open(