• map阶段
1. 使用job.setInputFormatClass(TextInputFormat)做为输入格式。注意输出应该符合自定义Map中定义的输出。
2. 进入Mapper的map()方法,生成一个List。
3. 在map阶段的最后,会先调用job.setPartitionerClass()对这个List进行分区,每个分区映射到一个reducer。
4. 每个分区内又调用job.setSortComparatorClass()设置的key比较函数类排序(如果没有通过job.setSortComparatorClass()设置key比较函数类,则使用key的实现的compareTo方法)。可以看到,这是一个二次排序。
5. 如果设置了Combiner(job.setCombinerClass)对output进行一次合并,从而减少对reduce的输出流量和预处理reduce的input数据。但不一定会执行,对于Combiner执行时机参考Reference[4]。
【说明】以上步骤省略了collect阶段、cache阶段等细节,更详细步骤参考Reference[3]
  • reduce阶段
1. shuffle阶段
reducer开始fetch所有映射到这个reducer的map输出。
2.1 sort阶段
再次调用job.setSortComparatorClass()设置的key比较函数类对所有数据对排序(因为一个reducer接受多个mappers,需要重新排序)。
2.2 secondary sort阶段
然后开始构造一个key对应的value迭代器。这时就要用到分组,使用jobjob.setGroupingComparatorClass()设置的分组函数类。只要这个比较器比较的两个key相同,他们就属于同一个组,它们的value放在一个value迭代器,而这个迭代器的key使用属于同一个组的所有key的第一个key。
3.reduce阶段
最后就是进入Reducer的reduce()方法,reduce()方法的输入是所有的(key和它的value迭代器)。同样注意输入与输出的类型必须与自定义的Reducer中声明的一致。
【注意】reducers的输出是无序的。

04Hadoop中的setPartitionerClass/SortComparator/GroupingComparator问题相关推荐

  1. Hadoop MapReduce工作详细流程(Partitioner/SortComparator/GroupingComparator)

    转自:http://blog.sina.com.cn/s/blog_7581a4c30102veem.html map阶段 1. 使用job.setInputFormatClass(TextInput ...

  2. GNU Make 使用手册(于凤昌中译版)

    GNU Make 使用手册(中译版) 翻译:于凤昌 GNU make Version 3.79 April 2000 Richard M. Stallman and Roland McGrath 1 ...

  3. java大数据最全课程学习笔记(6)--MapReduce精通(二)--MapReduce框架原理

    目前CSDN,博客园,简书同步发表中,更多精彩欢迎访问我的gitee pages MapReduce精通(二) MapReduce框架原理 MapReduce工作流程 流程示意图 流程详解 上面的流程 ...

  4. Hadoop学习之MapReduce

    Hadoop学习之MapReduce 目录 Hadoop学习之MapReduce 1 MapReduce简介 1.1 什么是MapReduce 1.2 MapReduce的作用 1.3 MapRedu ...

  5. 大数据Hadoop之HDFS和MapReduce_02_01

    Hadoop 主要由HDFS和MapReduce 引擎两部分组成.最底部是HDFS,它存储hadoop集群中所有存储节点上的文件.HDFS 的上一层是MapReduce 引擎,该引擎由JobTrack ...

  6. Hadoop面试题汇总-20221031

    Hadoop面试题汇总 HDFS部分 1.请描述HDFS的写流程. 答: 首先由客户端向 NameNode 发起文件上传请求,NameNode 检查文件要上传的目录,并鉴权. 如果上传用户对此目录有权 ...

  7. 【Hadoop】MapReduce 的应用场景

    1.数据类型 MapReduce中的所有数据类型都统一地实现了writable接口,以便用这些类型定义的数据可以被序列化进行网络传输和文件存储.当程序间传递对象或者持久化对象的时候,就需要序列化对象成 ...

  8. 【Hadoop之轨迹】Hadoop 使用(纯干货!)(用 Docker 模拟的集群)

    -- 目录 -- 1. 安装 Hadoop 2. 模拟集群环境 3. HDFS 1) 基础命令 2) Java 调用 API 操作(重) 3) 工作原理 4. MapReduce 1) 工作流程概述 ...

  9. 面试:第十二章:所有总结

    Java基础 java基本类型哪些,所占字节 byte :1个字节 short :2个字节 char :2个字节 int :4个字节 long :8个字节 float :4个字节 double :8个 ...

最新文章

  1. Intellij IDEA使用教程(超详细)
  2. 虚拟机Virtualbox中的Ubuntu系统,安装增强功能时报错:未能加载虚拟光驱VBoxsGuestAdditions.iso到虚拟电脑
  3. 为什么应该用record来定义DTO(续)
  4. Zookeeper应用:服务端上下线
  5. 运行时错误7内存溢出_C++程序运行时的内存模型
  6. redis缓存跟数据库数据不一致问题解决
  7. win7 64位系统没有语音识别,该如何解决?
  8. [TACL18]隐式句法树模型真的能学到句子中有意义的结构吗?
  9. 三十、K8s供应链安全1-准入控制器
  10. Spring实战——ByteArrayResource
  11. Dva引用echarts制作统计图表
  12. html中红色星号,使用CSS中的星号(*)通配符的总结
  13. C1认证:植物大战僵尸存档详解
  14. Android开发使用Glide获取图片背景色淡绿色解决办法
  15. 醉林疯的PTA 7-2 换硬币 (20分)
  16. 程序员必备利器:8 款“珍藏已久”的程序开发利器,瞬间提升效率
  17. 要和文心一言来一把你画我猜吗?
  18. 2020个人成长计划
  19. SecureCRT中常用linux命令
  20. 打开计算机 访问不到d盘,教大家电脑找不到d盘的原因及解决办法

热门文章

  1. php zip 编码,encoding - 用PHP如何检测一个ZIP包内的文件是在何种编码的系统下创建的...
  2. 基于python的聊天室_Python实现文字聊天室
  3. SpringBoot与jackson.databind兼容报错问题
  4. 电脑自带 超强系统文件自检 分享
  5. 020.day20 线程概述 多线程优缺点 线程的创建 线程常用方法 生命周期 多线程同步...
  6. 实验3.1 简单实现Intent带返回值的跳转
  7. 1082 与7无关的数(思维题,巨坑)
  8. c# 字符串中多个连续空格转为一个空格
  9. springmvc和servlet在上传和下载文件(保持文件夹和存储数据库Blob两种方式)
  10. 客户端与服务端的TCP通信实现(Qt)