Shuffle过程详解

Shuffle过程是MapReduce的核心,最近看了很多资料,网上说法大体相同,但有些地方有一点点出入,就是各个阶段的执行顺序

总个shuffle过程可以看做是从map输出到reduce输入的这个中间过程,在这个中间过程中,经过了一系列的步骤

下面看看官方给出的图

Map端

下面是我画的一张图

 


1.Input Split分配给Map

2.Map过程进行处理,Mapper任务会接收输入分片,然后不断的调用map函数,对记录进行处理。处理完毕后,转换为新的<key,value>输出。(其中每个分片对应一个map,一个map可以被调用多次来处理该分片)

3.Map的输出结果缓存在内存里

4.内存中进行Partition,默认是HashPartitioner(采用取模hash (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks), 目的是将map的结果分给不同的reducer,有几个Partition,就有几个reducer,partition的数目可以在job启动时通过参数 “-Dmapreduc.job.reduces”设置(Hadoop 2.2.0), HashPartitioner可以让map的结果均匀的分给不同机器上的reducer,保证负载均衡。

5.内存中在Partition结束后,对于不同分区的数据,会按照key进行排序,这里的key必须实现WritableComparable接口。该接口实现了Comparable接口,因此可以进行比较排序

6.对于排序后的<key,value>,会按照key进行分组。如果key相同,那么相同key的<key,value>就被分到一个组中。最终,每个分组会调用一次reduce函数

7.排序分组结束后,相同的key在一起组成了一个列表,如果设置过combiner,就合并数据,减少写入磁盘的记录数(combiner本质就是一个reducer)

8.当内存中buffer(default 512M)达到阈值(default 80%),就会把记录spill(即溢写)到磁盘中,优化Map时可以调大buffer的阈值,缓存更多的数据。

9.当磁盘中的spill文件数目比规定的文件数目多时,会多次调用combiner。在不影响结果的前下,Combiner可以被调用多次。(比如磁盘中的spill文件数目规定在个(包括)以上,当达到规定数量时, map的新的output会再次运行combiner,而如果磁盘中spill file文件就1~2个,就没有必要调用combiner)

10.Map结束时会把spill出来的多个文件合并成一个,merge过程最多10(默认)个文件同时merge成一个文件,多余的文件分多次merge,merge过程是merge sort的算法。

11.Map端shuffle完毕,数据都有序的存放在磁盘里,等待reducer来拿取

Reducer端

shuffle and sort的过程不仅仅在map端,别忘了reducer端还没拿数据呢,reduce job当然不能开启。

1. Copy phase: reducer的后台进程(default 5个)到被Application Master (Hadoop 2.2)指定的机器上将map的output拷贝到本地,先拷贝到内存,内存满了就拷贝的磁盘。

2. Sort phase(Merge phase): Reduer采用merge sort,将来自各个map的data进行merge, merge成有序的更大的文件。

3. 如果设置过Combiner,merge过程可能会调用Combiner,调不调用要看在磁盘中产生的文件数目是否超过了设定的阈值。(这一点我还没有确认,但Combiner在Reducer端是可能调用。)

4. Reduce phase: reduce job开始,输入是shuffle sort过程merge产生的文件。

转载自 http://blog.csdn.net/tanggao1314/article/details/51679246

Shuffle过程详解相关推荐

  1. MapReduce:Shuffle过程详解

    MapReduce:Shuffle过程详解 1.Map任务处理 1.1 读取HDFS中的文件.每一行解析成一个<k,v>.每一个键值对调用一次map函数.                & ...

  2. hadoop: Shuffle过程详解 (转载)

    原文地址:http://langyu.iteye.com/blog/992916 另一篇博文:http://www.cnblogs.com/gwgyk/p/3997849.html Shuffle过程 ...

  3. MapReduce内部shuffle过程详解(Combiner的使用)

    Maptask调用一个组件FileInputFormat FileInputFormat有一个最高层的接口 --> InputFormat 我们不需要去写自己的实现类,使用的就是内部默认的组件: ...

  4. Hadoop之Shuffle机制详解

    Hadoop之Shuffle机制详解 目录 Shuffle机制 Partition分区 WritableComparable排序 Combiner合并 GroupingComparator分组(辅助排 ...

  5. 简历项目描述过程详解

    简历项目描述过程详解 一.项目分点 1.1 集群规模 1.2 框架结构,画出来 1.3 框架 1.3.1 第一个Flume 1.3.1.1 碰到的问题 1.3.2 kafka 1.3.2.1 框架介绍 ...

  6. Spark 3.2.0 版本新特性 push-based shuffle 论文详解(二)背景和动机

    前言 本文隶属于专栏<大数据技术体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见大数据技术体系 目录 Spark 3.2.0 ...

  7. hadoop作业初始化过程详解(源码分析第三篇)

    (一)概述 我们在上一篇blog已经详细的分析了一个作业从用户输入提交命令到到达JobTracker之前的各个过程.在作业到达JobTracker之后初始化之前,JobTracker会通过submit ...

  8. Hadoop学习之Mapreduce执行过程详解

    一.MapReduce执行过程 MapReduce运行时,首先通过Map读取HDFS中的数据,然后经过拆分,将每个文件中的每行数据分拆成键值对,最后输出作为Reduce的输入,大体执行流程如下图所示: ...

  9. python的执行过程_在交互式环境中执行Python程序过程详解

    前言 相信接触过Python的伙伴们都知道运行Python脚本程序的方式有多种,目前主要的方式有:交互式环境运行.命令行窗口运行.开发工具上运行等,其中在不同的操作平台上还互不相同.今天,小编讲些Py ...

最新文章

  1. 超越技术分析_超越技术面试
  2. linux操作系统的特点包括什么,什么是Linux操作系统?有哪些主要特点?
  3. 剖析Elasticsearch集群系列第二篇 分布式的三个C、translog和Lucene段
  4. python opencv 界面按钮_PyAutoGUI:自动化键鼠操作的Python类库
  5. 【JavaSE04】Java中循环语句for,while,do···while-练习
  6. FLOW福禄创始人朱萧木:如何通过产品设计助力品牌营销传播
  7. Hive问题汇总记录,持续更新
  8. [深度学习-原理篇]什么是循环神经网络RNN与LSTM
  9. oracle配置控制文件快照的位置以及名称为,oracle的备份与恢复
  10. 量子计算机 计算混沌,深入了解量子混沌可能是量子计算机的关键
  11. java求最后一位不为0的数字_【Java】 剑指offer(62) 圆圈中最后剩下的数字
  12. 【分形算法】Jason带你飞之1——LS文法的java实现
  13. python内置函数每日一学 -- all()
  14. mp4文件如何转换为webm格式 1
  15. Dialog的高冷用法
  16. Day 18-Vue3 技术_新的组件
  17. 大数据技术与应用4-4MapRuduce
  18. office2016 下载路径
  19. 9.1 什么是包图?
  20. java逻辑测试题_《Java理解程序逻辑试题分析》

热门文章

  1. 看杜拉拉升职记的一些体会
  2. 如何从容的应对营销活动奖励发放
  3. Java实现文件的拆分合并
  4. IM1281B单相交流计量模块使用讲解
  5. ruby crawler Anemone
  6. 帮我找BUG 有功者赏看主公洗澡机会
  7. 日均承担过亿API请求的公司竟然在深圳!(AfterShip)
  8. C语言操作符(%,,|,^,<<,>>)
  9. ET工业大脑进入钢铁业!阿里云联手攀钢集团用AI炼钢
  10. MySQL实战案例练习