Hadoop分区与分组

下面以《Hadoop权威指南》中的一个例子来解释分区与分组的关系。

对于一般的键,只需要key值相同,则对应的value就会分配至同一个 reduce中;

对于复合键,形式为TextPair<key1,key2>(关于复合键,可参考另一篇关于TextPair的博文http://blog.csdn.net/until_v/article/details/40867973),通过控制 key1来进行分区,则具有相同的 key1的值会被划分至同一个分区中,但此时如果 key2不相同,则不同的key2会被划分至不同的分组。如

注:Partition代表分区,Group代表分组;

1900、1901为key1的值;35℃、34℃为key2的值

通过控制任务的分组(job.setGroupingComparatorClass(GroupComparator.class),可以忽略key2的值,使相同的 key1的值划分至同一组,从而使key1相同的数据能够迭代在一个 reduce中。如:

时间: 2024-11-05 14:57:09

Hadoop分区与分组的相关文章

Hadoop Mapreduce分区、分组、二次排序

1.MapReduce中数据流动   (1)最简单的过程:  map - reduce   (2)定制了partitioner以将map的结果送往指定reducer的过程: map - partition - reduce   (3)增加了在本地先进性一次reduce(优化)过程: map - combin(本地reduce) - partition -reduce2.Mapreduce中Partition的概念以及使用.(1)Partition的原理和作用        得到map给的记录后,

Map/Reduce中分区和分组的问题

全篇结论 [分在同一组的<key,value>一定同属一个分区.在一个分区的<key,value>可重载"job.setGroupingComparatorClass(a.class);"中的a类的 compare方法重新定义分组规则,同一组的value做为reduce的输入.] 一.为什么写 分区和分组在排序中的作用是不一样的,今天早上看书,又有点心得体会,记录一下. 二.什么是分区 1.还是举书上的例子,在8.2.4章节的二次排序过程中,用气温举例,所以这里

mapreduce原理【分区,分组】

分析这个原理,的原因是: 1.更好的理解MAPREDUCE的过程. 2.在二次排序时会用到这个原理,二次排序要重写分区方法,重写分组方法:如果原理没搞明白,就无法写二次排序的代码. Key 默认分区 默认分组 自定义分区 自定义分组 Abc123 1.使用系统默认分区方式,是按KEY进行分区. 2.KEY相同,分划分到一个分区且只能划分到一个分区. 划分方式按KEY的HASHCODE进行计算. 3.假设设定为3个分区,则划分方式可能是 a) 分区1:Abc789,Cde123,Cde456 b)

Hadoop mapreduce自定义分组RawComparator

本文发表于本人博客. 今天接着上次[Hadoop mapreduce自定义排序WritableComparable]文章写,按照顺序那么这次应该是讲解自定义分组如何实现,关于操作顺序在这里不多说了,需要了解的可以看看我在博客园的评论,现在开始. 首先我们查看下Job这个类,发现有setGroupingComparatorClass()这个方法,具体源码如下: /** * Define the comparator that controls which keys are grouped toge

MapReduce处理二次排序(分区-排序-分组)

MapReduce二次排序原理 在map阶段,使用job.setInputFormatClass定义的InputFormat将输入的数据集分割成小数据块splites,同时InputFormat提供一个RecordReader的实现. 本例子中使用的时TextInputFormat,他提供的RecordReader会将文本的字节偏移量作为key,这一行的文本作为value. 这就是自定义Map的输入是<LongWritable,Text>的原因,然后调用自定义的Map的map方法,将一个个&l

Hadoop之——自定义分组比较器实现分组功能

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46287985 不多说,直接上代码,大家都懂得 1.Mapper类的实现 /** * Mapper类的实现 * @author liuyazhuang * */ static class MyMapper extends Mapper<LongWritable, Text, NewK2, LongWritable>{ protected void map(LongWritable

hadoop的自定义分组实现 (Partition机制)

hadoop开发中我们会遇到类似这样的问题,比如 如何将不同省份的手机号分别输出到不同的文件中,本片文章将对hadoop内置的Partition类进行重写以解决这个问题. MapReduce的使用者通常会指定Reduce任务和Reduce任务输出文件的数量(R).用户在中间key上使用分区函数来对数据进行分区,之后在输入到后续任务执行进程.Hadoop中自带了一个默认的分区类HashPartitioner,它继承了Partitioner类,提供了一个getPartition的方法,它的定义如下所

Hadoop之--&gt;自定义分组 RawComparator

data: 3 33 23 22 22 11 1 --------------------- 需求: 1 12 23 3 当第一列相同时候要第二列的最小值 package group; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import java.net.URI; import org.apache.hadoop.conf.Configuration; import org

【Hadoop】Hadoop MR 自定义分组 Partition机制

1.概念 2.Hadoop默认分组机制--所有的Key分到一个组,一个Reduce任务处理 3.代码示例 FlowBean package com.ares.hadoop.mr.flowgroup; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import org.apache.hadoop.io.WritableComparable; public class FlowBean