先贴一张原理图(摘自hadoop权威指南第三版)

实际中看了半天还是不太理解其中的Partition,和reduce端的二次排序,最终根据实验来结果来验证自己的理解

1eg 数据如下 2014010114 标识20140101日的温度为14度,需求为统计每年温度的最最高值

2014010114

2014010216

2014010317

2014010410。。。

Partition 实际是根据map 任务的key,以及reduce任务的数量来决定最终来由那个reduce来处理,默认指定reduce的方法是key的hash 对reduce的数量取模来决定由那个reduce处理,map端将年作为key,温度作为value ,不指定reduce任务的情况下 默认的reduce数量为1,按照上面的规则 hashcode%1 =0(任何数对1求模对为0) 所以看到最后输出到HDFS中的文件名为part-r-0000 证明只有1个reduce 来处理任务

为了验证上面的猜想,自己重写了Partition规则, year%2 作为规则,偶数年为reduce1 处理, 奇数年由reduce2 处理,结果发现part-r-0000

2014 17
2012 32
2010 17
2008 37

part-r-0001

2015 99
2013 29
2007 99
2001 29

其中自己在reduce端做了二次排序,二次排序的概念就是 针对这组相对的key 怎么来输出结果,默认的牌勋规则是字典排序,按照英文字母的顺序,当然自己可以重写输出的规则,自己按照年的倒序输出,试验后基本明白了 shuffle 的partion 和reduce端的二次排序

partition重写负责如下

public class WDPartition extends HashPartitioner<Text,IntWritable> {

@Override
public int getPartition(Text text, IntWritable value, int numReduceTasks) {
// TODO Auto-generated method stub
   int year = Integer.valueOf(text.toString());
   return year%2;
    }

}

reduce 的二次排序如下

public class WDSort extends WritableComparator{

            public WDSort(){
                super(Text.class, true);
            }


         //按照key 来降序排序
          public int compare(WritableComparable a, WritableComparable b) {

String t1 = a.toString();
                   String t2 = b.toString();
               return -Integer.compare(Integer.valueOf(t1), Integer.valueOf(t2));
           }
}

Haoop MapReduce 的Partition和reduce端的二次排序的更多相关文章

  1. MapReduce在Map端的Combiner和在Reduce端的Partitioner

    1.Map端的Combiner. 通过单词计数WordCountApp.java的例子,如何在Map端设置Combiner... 只附录部分代码: /** * 以文本 * hello you * he ...

  2. 第2节 mapreduce深入学习:15、reduce端的join算法的实现

    reduce端的join算法: 例子: 商品表数据 product: pidp0001,小米5,1000,2000p0002,锤子T1,1000,3000 订单表数据 order:       pid ...

  3. Hadoop.2.x_高级应用_二次排序及MapReduce端join

    一.对于二次排序案例部分理解 1. 分析需求(首先对第一个字段排序,然后在对第二个字段排序) 杂乱的原始数据 排序完成的数据 a,1 a,1 b,1 a,2 a,2 [排序] a,100 b,6 == ...

  4. 深入理解Spark 2.1 Core (十一):Shuffle Reduce 端的原理与源代码分析

    http://blog.csdn.net/u011239443/article/details/56843264 在<深入理解Spark 2.1 Core (九):迭代计算和Shuffle的原理 ...

  5. hadoop的压缩解压缩,reduce端join,map端join

    hadoop的压缩解压缩 hadoop对于常见的几种压缩算法对于我们的mapreduce都是内置支持,不需要我们关心.经过map之后,数据会产生输出经过shuffle,这个时候的shuffle过程特别 ...

  6. MapReduce中一次reduce方法的调用中key的值不断变化分析及源码解析

    摘要:mapreduce中执行reduce(KEYIN key, Iterable<VALUEIN> values, Context context),调用一次reduce方法,迭代val ...

  7. MapReduce启动的Map/Reduce子任务简要分析

      对于Hadoop来说,是通过在DataNode中启动Map/Reduce java进程的方式来实现分布式计算处理的,那么就从源码层简要分析一下hadoop中启动Map/Reduce任务的过程.   ...

  8. Hadoop Mapreduce分区、分组、二次排序过程详解[转]

    原文地址:Hadoop Mapreduce分区.分组.二次排序过程详解[转]作者: 徐海蛟 教学用途 1.MapReduce中数据流动   (1)最简单的过程:  map - reduce   (2) ...

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

    1.MapReduce中数据流动   (1)最简单的过程:  map - reduce   (2)定制了partitioner以将map的结果送往指定reducer的过程: map - partiti ...

随机推荐

  1. path sum i

    Problem Statement:  Path sum i Given a binary tree and a sum, determine if the tree has a root-to-le ...

  2. 为程序猿正名,MM们,你们为什么要找一个程序猿男票?【原创】

    前言 免责声明:这篇文章关于什么?六一儿童节马上就要到了,作为一个前端攻城师,自我感觉效率还可以,老早已把任务搞完,页面布局和前端编码高效按时交付,呵呵.趁有时间,写写文章娱乐一下.MM们,请不要拿起 ...

  3. (1)使用bash脚本实现批量添加用户

    脚本实现内容: 可以指定用户名前缀,指定添加数量的批量添加用户脚本,密码为10为随机小写字母,并把用户名和密码写入文件中. 脚本代码: #!/bin/bashread -p "用户名前缀:& ...

  4. spring boot无法启动,或者正常启动之后无法访问报404的解决办法

    以前用spring boot都是用idea的自动创建,或者是用的Jhipster创建的,就没有深究怎么去搭建.但是今天晚上心血来潮,想自己搭一个demo来整合一些技术,于是就花一点时间来手动搭.因为今 ...

  5. Jenkins 远程构建任务

    开发过程中提交代码以后,如何不登录Jenkins就自动触发jenkins 任务来发布软件版本. 1.首先我们创建一个Jenkins任务. 2.选择"构建触发器"->勾选&qu ...

  6. 【转】一分钟内检查Linux服务器性能

    近期看了一篇运维排查的问题的十条命令,仔细看了一下,发现就是自己平时经常使用的一些,感觉还不错,就转一发~分享学习~ 如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出 ...

  7. 入坑以来最清晰的this指南[老哥们来交流指正]

    直接放有道云笔记的链接,博客园的markdown总是用不好. 1.这一篇是this的绑定(call,apply,bind) http://note.youdao.com/noteshare?id=c3 ...

  8. jmeter跨线程组传值

    在测试过程中,有时候需要jmeter跨线程组传值,jmeter本身又不具备此功能,那么,又该如何实现呢? 其实,我们可以通过BeanShell去实现. 实现过程如下: 1.线程组A中,使用正则表达式提 ...

  9. 如何运行容器?- 每天5分钟玩转 Docker 容器技术(22)

    上一章我们学习了如何构建 Docker 镜像,并通过镜像运行容器.本章将深入讨论容器:学习容器的各种操作,容器各种状态之间如何转换,以及实现容器的底层技术. 运行容器 docker run 是启动容器 ...

  10. Thinkphp5使用阿里大于短信验证

    现在各种平台登录验证很多时候会使用短信验证,快捷安全,有很多平台提供短信验证服务,相比较而言阿里大于价格比较便宜,快捷,所以在在千锋日常的php教学中多以此为例来说明短信验证的使用.下面我们在tp5中 ...