Shuffle过程是MR的一个核心。

简答了解Shuffle的作用:

需求场景:

  在集群环境下,Map task和Reduce task运行在不同的节点上,这个情况下Reduce执行时需要跨节点从其他节点上拉取Map task的输出结果。如果集群上又很多任务在运行,会在运行时消耗很严重的网络资源(这属于正常现象),这种现象无法改变,只能最大化的减少资源的消耗。在数据拉取过程中怎么改变?

  1.完整的从Map task 端拉取数据到Reduce端

  2.在跨节点拉取数据时,尽可能减少对带宽的不必要消耗

  3.减少磁盘IO对Task的影响

shuffle在Map阶段的操作:

  整个流程主要分四部:每个map task都有一个内存的缓冲区,存储着map的输出结果。当缓存区快满的时候需要把缓存区的数据以一个临时文件的方式存储放在磁盘。当整个map task结束之后再对磁盘中map task产生的文件进行合并,生成最终的输出文件,等待Reduce的拉取。

map阶段只能做 加1 的相加操作

把Map输出结果写入到文件,把key value 进行分组相加

  内存缓存区默认100MB。如果map task的输出结果大于100M的时候可能会撑爆内存。所以有一定情况下把临时数据(内存缓存区的数据)写入到磁盘。重新利用这个这块缓存区。内存写入磁盘的过程叫spill(溢写)。默认阈值比例是0.8。当内存数据占用80M的时候锁定这80M的内存。执行溢写操作。Map task的输出结果写入到剩下20M

  Merge阶段:多个map输出文件合并成一个文件的过程就叫merge。如果之前没有设置combiner那么merge阶段也可以对key value进行合并相加

决定那个reduce接受咱们map输出结果

  MapReduce提供Partitioner接口。它的作用就是根据Key或者value 以及Reduce的数量来决定当前输出数据最终应该交给那个reduce task处理。默认对key hash后再以reduce task数量取模。默认的取模方式只是为了平均reduce的处理能力。可以用户自己设置

--------------

  到此Shuffle在Map task阶段的任务就结束了。  简单来说就是不断的拉取当前Job中每个map task的最终结果,然后把从不同地方拉取来的数据进行merge。最终形成一个reduce的输入文件

  Combiner可以把相同的key的value相加起来。但是只能用于reduce的输入的key/value与输出的key/value类型完全一致并且不影响结果的展示。比如:累加之类的。   其他场景都会加大消耗。所以一般不建议。

接下来就是reduce阶段的shuffle。主要做两个操作。

1:拉取数据。Reduce进程启动copy线程,通过HTTP方式请求map task所在的TaskTracker(NM)获取map task的输出文件。

2.merge阶段。

转载于:https://www.cnblogs.com/taiqq/p/8082496.html

MapReduce——shuffle相关推荐

  1. 2.27 MapReduce Shuffle过程如何在Job中进行设置

    一.shuffle过程 总的来说: *分区 partitioner *排序 sort *copy (用户无法干涉) 拷贝 *分组 group 可设置 *压缩 compress *combiner ma ...

  2. mapreduce shuffle过程

    转自http://langyu.iteye.com/blog/992916 Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方.要想理解MapReduce, Shuffle是必须要了 ...

  3. 彻底理解MapReduce shuffle过程原理

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

  4. ibatis 存储过程 结果集 map_大数据之MapReduce shuffle过程

    一.MapReduce计算模型 我们知道MapReduce计算模型主要由三个阶段构成:Map.shuffle.Reduce. Map是映射,负责数据的过滤分法,将原始数据转化为键值对:Reduce是合 ...

  5. MapReduce Shuffle优化方向

    Shuffle过程介绍可以查看该博客:http://langyu.iteye.com/blog/992916 优化方向: 压缩:对数据进行压缩,减少写读数据量: 减少不必要的排序:并不是所有类型的Re ...

  6. mapreduce shuffle过程问答

    通过hadoop权威指南学习hadoop,对shuffle过程一直很疑惑,经过查看网上多个帖子,最终 完成此篇问答总结. 1.什么叫shuffle 从map任务输出到reducer任务输入之间的过程就 ...

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

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

  8. Map Reduce Shuffle

    在hadoop技术体系MapReduce中,Shuffle是比较重要的一个环节.对理解好Shuffle对往后的MapReduce调优将起到非常大的作用. 以下是我个人对MapReduce Shuffl ...

  9. 总结:详细讲解MapReduce过程(整理补充)

    从启动和资源调度来看MapReduce过程 Hadoop 1.x版本 首先-先了解一下必知概念 From:MapReduce工作原理图文详解,JobTracker和TaskTracker概述 客户端( ...

最新文章

  1. 学数解题160919
  2. mysql的collation区分大小写设置
  3. windows+mysql+解压版_Windows操作系统安装MySQL解压版
  4. 计算机二级Office经验资源分享【一次过关。】
  5. GDCM:dicom文件转储签证变更的测试程序
  6. SpringSecurity 案例父工程创建
  7. SpringBoot设置首页(默认页)跳转
  8. 【Java】forward redirect 的差异
  9. 基于highcharts+easui+java生成时趋图
  10. 131 MySQL单表查询(重要)
  11. numpy数组随机抽取
  12. win10设置计算机关机时间,win10系统怎样设置定时关机 win10有定时关机设置吗
  13. python获取B站单个视频的封面
  14. B - 最少硬币问题
  15. L1-079 天梯赛的善良
  16. 为什么好好的就不快乐了?
  17. sgd kmeans
  18. Linux学习(五):挂载新的硬盘
  19. Liunx7 DNS服务器正反解析,域名转发
  20. 中国最贵海报设计师!黄海究竟凭什么?

热门文章

  1. 为什么用抽象三层结构
  2. java native方法体在哪_java中native方法的使用
  3. linux下glew例子,一个简单的GLSL Shader例子
  4. python matplotlib模块画出的图像转换为.tiff格式
  5. C/C++中的复数介绍
  6. mysql慢查询日志平时开启吗_MySQL开启慢查询日志功能的方法
  7. CMakeLists.txt的运行方法
  8. 3D打印机分类与速度
  9. minui 向div放html,c# – 如何添加css类到html通用控件div?
  10. python有关迭代器和生成器的面试题_【面试题 | Python中迭代器和生成器的区别?】- 环球网校...