码迷,mamicode.com
首页 > 编程语言 > 详细

MapReduce框架排序和分组

时间:2015-08-07 20:18:16      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:hadoop   mapreduce   partitioner   setgroupingcomparato   分组   

前言:

        Mapreduce框架就是map->reduce,其中Map中的<key,value>是偏移量和行值,在其之前会使用job.setInputFormatClass定义的InputFormat将输入的数据集分割成小数据块splites,同时InputFormat提供一个RecordReder的实现。本例子中使用的是TextInputFormat,他提供的RecordReder会将文本的一行的行号作为key,这一行的文本作为value。这就是自定义Map的输入是<LongWritable, Text>的原因。

       之后调用Map类进行split,将其写入环形内存中,待其达到阀值时,对其的80%进行排序排序和分组,这都是在Map和Reduce之间完成,那么下面我们来看看这些函数类

一、分区

参考上一篇博客:http://blog.csdn.net/gamer_gyt/article/details/47339755

二、排序

按照Key进行排序,其实在每一个Map函数里就已经默认调用了job.setSortComparatorClass(Comparator.class)类进行了排序,但此时只不过对每一个Map函数接受的value(行值)的排序,这里所说的是map和reduce之间的排序,实现的是对所有的key进行排序

三、分组

job.setGroupingComparatorClass(GroupComparator.class);

如果用户想自定义排序方式,首先需要实现两个Comparator并将其按照上面的格式进行配置。每一个Comparator需要继承WritableComparator基类。如下所示:

public static class GroupComparator extends WritableComparator {

protected GroupComparator() {

super(IntPair.class, true);

}

@Override

public int compare(WritableComparable w1, WritableComparable w2) {

IntPair ip1 = (IntPair) w1;

IntPair ip2 = (IntPair) w2;

return IntPair.compare(ip1.getFirst(), ip2.getFirst());

}

}

这一点在二次排序中深有体现:可以参考http://blog.csdn.net/gamer_gyt/article/details/47315405

版权声明:本文为博主原创文章,未经博主允许不得转载。

MapReduce框架排序和分组

标签:hadoop   mapreduce   partitioner   setgroupingcomparato   分组   

原文地址:http://blog.csdn.net/gamer_gyt/article/details/47340185

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!