一、Map阶段:
  a. 文件切片之后,每一个切片对应一个MapTask

  b. 在MapTask中,默认按行读取,每读取一行,就调用一次map方法

  c. map方法在执行的时候会将结果(这个结果中已经包含了分区信息)写到MapTask自带的缓冲区中。注意:每一个MapTask都会自带一个缓冲区
  d. 当数据放到缓冲区中之后,数据在缓冲区中会进行分区(partition)、排序(sort)(扩展:在缓冲区中排序使用的排序算法是快速排序)。如果指定了合并类(combine),数据还会进行combine
  e. 缓冲区是维系在内存中,默认是100M
  f. 当缓冲区的使用达到指定条件(溢写阈值默认是0.8,即当缓冲区使用达到80%的时候会产生溢写)之后,MapTask会将这个缓冲区中的数据溢写(spill)到磁盘上产生溢写文件。后续的结果会继续写到缓冲区中。每一次溢写都会产生一个新的溢写文件
  g. 如果产生了多个溢写文件,那么会将多个溢写文件合并(merge)成1个final out文件。如果溢写之后,后续结果放入缓冲区中但是没有达到溢写阈值,而数据又处理完成,那么MapTask会将溢写文件中的结果和缓冲区的结果直接合并(merge)到最后的final out文件中

  h. 在merge过程中,结果会再次进行分区和排序,所以final out文件是整体分好区并且排好序
  i. 如果指定了合并类(Combiner),并且溢写文件的个数>=3个,那么在merge过程中会自动进行一次combine
  j. 注意问题:
     i. 溢写不一定产生
     ii. 溢写与否与输入的切片大小是没有直接关系
     iii. 溢写文件的大小要考虑序列化因素
     iv. 缓冲区本质上是一个字节数组,这个字节数组在底层做了改变,使缓冲区形成了一个环形的缓冲区。设置成环形的目的是为了减少寻址
     v. 溢写阈值的作用是为了减少阻塞
 二、Reduce阶段:
  a. 每一个ReduceTask都会启动fetch线程去MapTask中抓取当前要处理的分区的数据
  b. ReduceTask会将抓取过来的数据暂时放到文件中存储,从每一个MapTask中抓取的数据都会对应一个小文件
  c. ReduceTask会将这些小文件去合并(merge)成一个文件,在merge过程中,数据会进行排序 - 将局部有序变成整体有序 - merge过程中的排序使用的排序算法是归并排序
  d. merge完成之后,ReduceTask会将相同的键对应的值放到一块产生一个迭代器,这个过程从称之为分组(group)
  e. 每一个键调用一次reduce方法,reduce方法将结果写到HDFS上
  f. 注意问题:
     i. 默认fetch线程的数量为5
     ii. fetch线程通过HTTP请求的方式去抓取数据
     iii. merge因子默认为10,表示每10个小文件合成一个大文件
     iv. ReduceTask阈值默认为0.05,即当有5%的MapTask执行结束,就启动ReduceTask开始抓取数据
 三、Shuffle调优:
  a. 调大缓冲区,实际生产环境中一般将这个值调为250~400M
  b. 调大溢写阈值,可以减少和磁盘的交互但是同时增大了阻塞的概率
  c. 实际生产环境中,尽量增加Combine过程
  d. 可以对final out文件进行压缩。这种方案是对网络资源的一种取舍。如果网络资源紧张可以考虑这种方式
  e. 增多fetch线程的数量
  f. 增大merge因子 - 不建议
  g. 减小ReduceTask的阈值

推荐使用的方法是acde

mapreduce的shufflue过程的更多相关文章

  1. MapReduce的Shuffle过程介绍

    MapReduce的Shuffle过程介绍 Shuffle的本义是洗牌.混洗,把一组有一定规则的数据尽量转换成一组无规则的数据,越随机越好.MapReduce中的Shuffle更像是洗牌的逆过程,把一 ...

  2. 第2节 mapreduce深入学习:7、MapReduce的规约过程combiner

    第2节 mapreduce深入学习:7.MapReduce的规约过程combiner 每一个 map 都可能会产生大量的本地输出,Combiner 的作用就是对 map 端的输出先做一次合并,以减少在 ...

  3. MapReduce:Shuffle过程详解

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

  4. MapReduce的InputFormat过程的学习

    转自:http://blog.csdn.net/androidlushangderen/article/details/41114259 昨天经过几个小时的学习,把MapReduce的第一个阶段的过程 ...

  5. Hadoop MapReduce的Shuffle过程

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

  6. MapReduce 的 shuffle 过程中经历了几次 sort ?

    shuffle 是从map产生输出到reduce的消化输入的整个过程. 排序贯穿于Map任务和Reduce任务,是MapReduce非常重要的一环,排序操作属于MapReduce计算框架的默认行为,不 ...

  7. MapReduce简单执行过程及Wordcount案例

    MapReducer运行过程 以单词统计为案例. 假如现在文件中存在如下内容: aa bb aa cc dd aa 当然,这是小文件,如果文件大小较大时会将文件进行 "切片" ,此 ...

  8. mapReduce的shuffle过程

    http://www.jianshu.com/p/c97ff0ab5f49 总结shuffle 过程: map端的shuffle: (1)map端产生数据,放入内存buffer中: (2)buffer ...

  9. Mapreduce中maptask过程详解

    一.Maptask并行度与决定机制 1.一个job任务的map阶段的并行度默认是由该任务的大小决定的: 2.一个split切分分配一个maprask来并行处理: 3.默认情况下,split切分的大小等 ...

随机推荐

  1. Linux知识点(二)

    1 df 查看磁盘空间使用情况 df: disk free 空余硬盘 1.基本语法 df  项 (功描能述:列出文件系统的整体磁盘使用量,检查文件系统的磁盘空间占用情况)选 2.选项说明 选项 功能 ...

  2. Java 工厂方法模式的简单示例

    工厂方法模式:也叫工厂模式,属于类创建型模式,工厂父类(接口)负责定义产品对象的公共接口,而子类工厂则负责创建具体的产品对象. 目的:是为了把产品的实例化操作延迟到子类工厂中完成,通过工厂子类来决定究 ...

  3. 乱花渐入迷人眼------从解决jqueryEasyUI上传插件提交ajax请求谈网页调试

    由于要给格斗男神写搏击俱乐部ERP系统,就要用到jquery Easyui插件规范数据和表单的录入,其中一项功能就是上传商品图片, 而且是在datagrid-detailview中使用filebox完 ...

  4. mvc api 关于 post 跟get 请求的一些想法[FromUri] 跟[FromBody] 同一个控制器如何实现共存

    wep api  在设置接收请求参数的时候,会自动根据模型进行解析. [FromUrl] 跟[FromBody] 不可以同时使用. 要拆分开: [HttpGet] public object GetP ...

  5. IE8 CSS样式兼容性清单

    IE8对于CSS2.1是完整支持的,对于CSS3则只是部分支持.下文中只列出IE8完全支持及完全不支持的样式,对于. 注:下文中的E.F均指html标签名,如p,img等. At-rules At类规 ...

  6. POJ 3683 神父赶婚宴 2-SAT+输出模板

    题意:一个小镇里面只有一个牧师,现在有些新人要结婚,需要牧师分别去主持一个仪式,给出每对新人婚礼的开始时间 s 和结束时间 t ,还有他们俩的这个仪式需要的时间(每对新人需要的时间长短可能不同) d ...

  7. ABP .net Core MQTT+signalr通讯

    abp版本: 4.3.0.0 .net core 版本 2.2 1.Mqtt 1.1 添加程序集:M2MqttDotnetCore(差点以为没有.net core 的) 2.2 实现代码:抄了个单例模 ...

  8. jmeter csv Data Set Config 文件中带引号的数据转换问题(自动添加双引号解决办法)

    1.我们从csv中获取数据,在jmeter中使用这些数据,其中csv的数据如图,有的数据包含引号. 2.问题:我们获取的json数据,被自动添加了双引号 3.解决方式: 在CSV Data Set C ...

  9. less基本用法:持续归纳中

    todo 1,嵌套语法:https://www.w3cschool.cn/less/nested_directives_bubbling.html 简单来说就是可以与html一样去写css,并且会继承 ...

  10. php的intval函数

    PHP intval() 函数 PHP 可用的函数PHP 可用的函数 intval() 函数用于获取变量的整数值. intval() 函数通过使用指定的进制 . PHP , PHP , PHP 语法 ...