1. shuffle: 洗牌、发牌——(核心机制:数据分区,排序,缓存);

shuffle具体来说:就是将maptask输出的处理结果数据,分发给reducetask,并在分发的过程中,对数据按key进行排序;

2. shuffle缓存流程:

shuffle是MapReduce处理流程中的一个过程,每一个处理步骤是分散在各个maptask和reducetask节点上完成的,整体来看,分为三个操作:

1)分区partition;

2)根据key进行sort排序;

3)Combiner进行局部value的合并;

(这里再提一下Combiner和reduce的区别:

Combiner是在每一个maptask所在的节点运行

Reducer是接收全局所有Mapper的输出结果;

3. 详细流程:

1)maptask收集map()方法输出的key-Value对,放到内存缓冲区(环形缓冲区)中;

2)从内存缓冲区中不断溢出本地磁盘文件,可能会溢出多个文件;

3)多个溢出文件会被合并成大的溢出文件;

4)在溢出的过程以及合并的过程中,都要调用partition进行分组和对key的排序;

5)reducetask根据分区号,去maptask机器上取相对应的结果分区数据;

6)reducetask会取到同一个分区的来自不同maptask的结果文件,reducetask会将这些文件在进行合并;

7)合并成大文件后,shuffle的过程也就结束了,后面进入reducetask的逻辑运算过程,调用reduce方法进行逻辑运算;

8)shuffle中的缓冲区大小会影响到mapreduce程序的执行效率,原则上说,缓冲区越大,磁盘io的次数越少,执行的速度就越快;缓冲区的大小默认是100M,可以通过参数io.sort.mb进行设置;

Shuffle流程详解:

map之后的数据会写入一个内存缓冲区,一条原始记录进过map后转换成<key,value>的形式进入内存缓冲区,但是此时并不知道这个<key,value>对应该发送给哪个reducetask,这个时候partition开始派上用场了,partition根据key的值和reducetask的数量确定这个<key,value>具体应该发送给哪个reducetask。确定的过程是这样的:partition计算key的hash值,将hash对reducetask的数量的数量求模 来确定要发送的reducetask的ID (实际上,由于key值得非均衡分布 这种算法可能会导致发送给某台reducetask的数据过多 而另外的reducetask收到的数据过程,hadoop允许我们自己实现partition接口来实现数据的均衡)。

内存缓冲区的大小当然是有限制的,默认是100MB,Map的输出数据一般会比这个大,因此但内存缓冲区快要写满时,hadoop即启动一个线程来讲缓冲区的数据输出到磁盘,这个过程叫做溢写 spill,对应的有一个溢写比例spill.percent,其默认值为0.8,则当内存缓冲区的数据达到80MB大小时,溢写线程启动并锁定这个80MB的内存区域,开始对80MB内部的数据做排序并写出至本地磁盘。这个时候map的输出就只能往剩下的20MB的内存区域中写数据了。这样写一次的话就是一个80MB的文件了。当溢写很多次的话,就会在本地生成很多的小文件。

将这些小文件发送给reducetask并不是一个很好的主意,溢写之后hadoop同时会进行combine操作和merge操作,combine是将具有相同key值得<key,value>组合,merge将小文件合并为大文件等待map过程结束后进行发送。

每个maptask的工作量有大有小,有的很早就完成了任务,有的还在辛勤工作,一部分完成了工作的maptask向ResourceManager发送消息告知分配的任务已经完成。这个时候reducetask也没有闲着,reducetask向ResourceManager发送消息,查询已经完成任务的maptask,并从该maptask的本地文件系统拉取数据,由于有很多的maptask,因此reducetask也会得到很多的小文件,reducetask拉取数据的同时会对这些文件做merge操作,为即将开始的reduce任务做准备。

当Map过程和shuffle过程真正结束的时候,reducetask才开始reduce过程,最后将结果输出至HDFS。

hadoop的shuffle过程的更多相关文章

  1. Hadoop学习笔记—10.Shuffle过程那点事儿

    一.回顾Reduce阶段三大步骤 在第四篇博文<初识MapReduce>中,我们认识了MapReduce的八大步骤,其中在Reduce阶段总共三个步骤,如下图所示: 其中,Step2.1就 ...

  2. 剖析Hadoop和Spark的Shuffle过程差异

    一.前言 对于基于MapReduce编程范式的分布式计算来说,本质上而言,就是在计算数据的交.并.差.聚合.排序等过程.而分布式计算分而治之的思想,让每个节点只计算部分数据,也就是只处理一个分片,那么 ...

  3. 剖析Hadoop和Spark的Shuffle过程差异(一)

    一.前言 对于基于MapReduce编程范式的分布式计算来说,本质上而言,就是在计算数据的交.并.差.聚合.排序等过程.而分布式计算分而治之的思想,让每个节点只计算部分数据,也就是只处理一个分片,那么 ...

  4. Hadoop MapReduce的Shuffle过程

    一.概述 理解Hadoop的Shuffle过程是一个大数据工程师必须的,笔者自己将学习笔记记录下来,以便以后方便复习查看. 二. MapReduce确保每个reducer的输入都是按键排序的.系统执行 ...

  5. Shuffle过程

    Shuffle过程 在MapReduce框架中,shuffle是连接Map和Reduce之间的桥梁,Map的输出要用到Reduce中必须经过shuffle这个环节,shuffle的性能高低直接影响了整 ...

  6. Hadoop学习之shuffle过程

    转自:http://langyu.iteye.com/blog/992916,多谢分享,学习Hadopp性能调优的可以多关注一下 Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方, ...

  7. 【Big Data - Hadoop - MapReduce】通过腾讯shuffle部署对shuffle过程进行详解

    摘要: 通过腾讯shuffle部署对shuffle过程进行详解 摘要:腾讯分布式数据仓库基于开源软件Hadoop和Hive进行构建,TDW计算引擎包括两部分:MapReduce和Spark,两者内部都 ...

  8. Hadoop计算中的Shuffle过程(转)

    Hadoop计算中的Shuffle过程 作者:左坚 来源:清华万博 时间:2013-07-02 15:04:44.0 Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方.要想理解Ma ...

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

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

随机推荐

  1. 画布canvas签名

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  2. Jquery 全局错误处理

    $.ajaxSetup({ complete: function (request, status) { if (typeof (request) != 'undefined') { var resp ...

  3. QtWebkits如何向QtWebEngine过渡

    QtWebkits如何向QtWebEngine过渡 1. 前言 很遗憾,QtWebkits在Qt5.6以上版本被淘汰了,对于这个接口良且和其他类例如QWebFrame完美结合的组件就这么没了,我只能表 ...

  4. 浅谈SQL Server中的事务日志(一)----事务日志的物理和逻辑构架

    简介 SQL Server中的事务日志无疑是SQL Server中最重要的部分之一.因为SQL SERVER利用事务日志来确保持久性(Durability)和事务回滚(Rollback).从而还部分确 ...

  5. Java—封装

    封装 将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法类实现对隐藏信息的操作和访问. 封装的实现步骤:修改属性的可见性(设为private)=>创建setter和ge ...

  6. 建立本地yum源

    使用环境 服务器处于内网,需要更新 网络资源紧张,节约带宽 建立yum目录 mkdir -p /opt/opmgmt/yum rsync服务器列表 centos mirrors epel mirror ...

  7. linux上传、下载文件rz、sz命令

    1.介绍 sz命令是利用ZModem协议来从linux服务器传送文件到本地,一次可以传送一个或多个文件.相对应的从本地上传文件到Linux服务器,可以使用rz命令. 2.参数说明 -a,以文本方式传输 ...

  8. 笨办法学Python(十四)

    习题 14:提示和传递 让我们使用 argv 和 raw_input 一起来向用户提一些特别的问题.下一节习题你会学习如何读写文件,这节练习是下节的基础.在这道习题里我们将用略微不同的方法使用 raw ...

  9. VMware下,windows7无法自动更新,故障80072EE2

    手动安装更新 1) KB3020369 2) KB3172605

  10. vue中css动画原理

    显示原理: <transition name='fade'> <div v-if='show'>hello world</div> </transition& ...