ReduceTask 工作机制和 ReduceTask 并行度

Reduce 大致分为 copy、sort、reduce 三个阶段,重点在前两个阶段。copy 阶段包含一个 eventFetcher 来获取已完成的 map 列表,由 Fetcher 线程去 copy 数据,在此过程中会启动两个 merge 线程,分别为 inMemoryMerger 和 onDiskMerger,分别将内存中的数据 merge 到磁盘和将磁盘中的数据进行 merge。待数据 copy 完成之后,copy 阶段就完成了,开始进行 sort 阶段,sort 阶段主要是执行 finalMerge 操作,纯粹的 sort 阶段,完成之后就是 reduce 阶段,调用用户定义的 reduce 函数进行处理

详细步骤

1. Copy阶段,简单地拉取数据。Reduce进程启动一些数据copy线程(Fetcher),通过HTTP方式请求maptask获取属于自己的文件。

2. Merge阶段。这里的merge如map端的merge动作,只是数组中存放的是不同map端copy来的数值。Copy过来的数据会先放入内存缓冲区中,这里的缓冲区大小要比map端的更为灵活。merge有三种形式:内存到内存;内存到磁盘;磁盘到磁盘。默认情
况下第一种形式不启用。当内存中的数据量到达一定阈值,就启动内存到磁盘的merge。与map 端类似,这也是溢写的过程,这个过程中如果你设置有Combiner,也是会启用的,然后在磁盘中生成了众多的溢写文件。第二种merge方式一直在运行,直到没有map端的数据时才结束,然后启动第三种磁盘到磁盘的merge方式生成最终的文件。

3. 合并排序。把分散的数据合并成一个大的数据后,还会再对合并后的数据排序。

4. 对排序后的键值对调用reduce方法,键相等的键值对调用一次reduce方法,每次调用会产生零个或者多个键值对,最后把这些输出的键值对写入到HDFS文件中。

Shuffle 过程

map 阶段处理的数据如何传递给 reduce 阶段,是 MapReduce 框架中最关键的一个流程,这个流程就叫 shuffle

shuffle: 洗牌、发牌 ——(核心机制:数据分区,排序,分组,规约,合并等过程)

shuffle 是 Mapreduce 的核心,它分布在 Mapreduce 的 map 阶段和 reduce 阶段。一般把从 Map 产生输出开始到 Reduce 取得数据作为输入之前的过程称作 shuffle。

1. Collect阶段:将 MapTask 的结果输出到默认大小为 100M 的环形缓冲区,保存的是key/value,Partition 分区信息等。

2. Spill阶段:当内存中的数据量达到一定的阀值的时候,就会将数据写入本地磁盘,在将数据写入磁盘之前需要对数据进行一次排序的操作,如果配置了 combiner,还会将有相同分区号和 key 的数据进行排序。

3. Merge阶段:把所有溢出的临时文件进行一次合并操作,以确保一个 MapTask 最终只产生一个中间数据文件。

4. Copy阶段:ReduceTask 启动 Fetcher 线程到已经完成 MapTask 的节点上复制一份属于自己的数据,这些数据默认会保存在内存的缓冲区中,当内存的缓冲区达到一定的阀值的时候,就会将数据写到磁盘之上。

5. Merge阶段:在 ReduceTask 远程复制数据的同时,会在后台开启两个线程对内存到本地的数据文件进行合并操作。

6. Sort阶段:在对数据进行合并的同时,会进行排序操作,由于 MapTask 阶段已经对数据进行了局部的排序,ReduceTask 只需保证 Copy 的数据的最终整体有效性即可。Shuffle 中的缓冲区大小会影响到 mapreduce 程序的执行效率,原则上说,缓冲区越
大,磁盘io的次数越少,执行速度就越快

缓冲区的大小可以通过参数调整, 参数:mapreduce.task.io.sort.mb 默认100M

MapReduce运行机制-Reduce阶段相关推荐

  1. MapReduce运行机制-Map阶段

    MapTask 运行机制 整个Map阶段流程大体如上图所示. 简单概述:inputFile通过split被逻辑切分为多个split文件,通过Record按行读取内容给map(用户自己实现的)进行处理, ...

  2. MapReduce运行机制

    相关链接  MapReduce中Shuffle机制详解--Map端Shuffle链接  MapReduce中Shuffle机制详解--Reduce端Shuffle链接 MapReduce将作业job的 ...

  3. MapReduce 运行机制

    Hadoop 中的MapReduce是一个使用简单的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并以一种可靠容错式并行处理TB级别的数据集. 一个MapReduce作业 ...

  4. 【大数据day14】——MapReduce的运行机制详解(案列:Reduce 端实现 JOIN, Map端实现 JOIN,求共同好友)

    文章目录 1 .MapReduce的运行机制详解 1.1:MapTask 工作机制 详细步骤 配置 1.2 :ReduceTask 工作机制 详细步骤 1.3:Shuffle 过程 2. 案例: Re ...

  5. 大数据之MapReduce详解(MR的运行机制及配合WordCount实例来说明运行机制)

    目录 前言: 1.MapReduce原理 2.mapreduce实践(WordCount实例) 目录 今天先总体说下MapReduce的相关知识,后续将会详细说明对应的shuffle.mr与yarn的 ...

  6. 什么是MapReduce?MapReduce的运行机制是什么?MapReduce的实现过程

    1. MAPREDUCE原理篇(1) Mapreduce是一个分布式运算程序的编程框架,是用户开发"基于hadoop的数据分析应用"的核心框架: Mapreduce核心功能是将用户 ...

  7. MapReduce的运行机制及共同好友

    1 .MapReduce的运行机制详解 1.1:MapTask 工作机制 整个Map阶段流程大体如上图所示. 简单概述:inputFile通过split被逻辑切分为多个split文件,通过Record ...

  8. MapTask运行机制详解以及Map任务的并行度,ReduceTask 工作机制以及reduceTask的并行度,MapReduce总体工作机制

    MapTask运行机制详解 整个Map阶段流程大体如图所示 简单概述 inputFile通过split被逻辑切分为多个split文件, 通过Record按行读取内容给map(用户自己实现的)进行处理, ...

  9. 经典MapReduce作业和Yarn上MapReduce作业运行机制

    一.经典MapReduce的作业运行机制 如下图是经典MapReduce作业的工作原理: 1.1 经典MapReduce作业的实体 经典MapReduce作业运行过程包含的实体: 客户端,提交MapR ...

最新文章

  1. 软件架构设计 温昱著 - 读书笔记
  2. Git的强制操作:强制推送[项目中千万不要用] 强制下拉
  3. QDU-GZS and String
  4. 【Java多线程】创建多线程的三种方式
  5. W10系统配置java环境变量
  6. linux-gcc 编译时头文件和库文件搜索路径
  7. scala解析xml_Scala XML处理–文字,序列化,解析,保存和加载示例
  8. 201906017学习小程序
  9. 计算机教师辞职,(多篇)教师辞职报告汇总八篇
  10. Eclipse优化设置技巧
  11. delphi完美经典--第十八章
  12. love2d 乒乓球游戏
  13. 计算机组成原理——计算机的工作过程
  14. iTween和DOTween的选择
  15. Uniapp进行App云打包—安卓Android端
  16. 魔兽争霸游戏开始前数据包分析
  17. 随着时间在数字上加1的PHP代码,自动在对应的数字上加一,是怎么加的,搞不懂...
  18. ZigBee学习笔记——(三)ZigBee无线传感器网络通信标准
  19. 服务器上如何查看日志记录
  20. TCP模拟HTTP请求

热门文章

  1. JS实现上下左右对称的九九乘法表
  2. [分享]另一种对 IDisposable 的实现
  3. py2exe使用相对路径的当前目录问题
  4. Addin and Automation Development In VB.NET 2003 (3)
  5. 【Apache POI】基础处理方法总结
  6. PESCMS Ticket 客服工单系统 v1.2.4 发布
  7. FB 宕机,Telegram 用户疯涨,P**hub 流量猛增
  8. 为什么静态成员、静态方法中不能用this和super关键字
  9. 关于H3C MSR路由器L2TP隧道协议路由配置的特点
  10. 实验分享:用Python生成个性化二维码