Shuffle阶段又可以分为Map端的shuffle和Reduce端的Shuffle。

一、Map端的shuffle

  Map端会处理输入数据并产生中间结果,这个中间结果会写到本地磁盘(转者注: 这个中间结果可以压缩, 以节省IO),而不是HDFS。每个Map的输出会先写到内存缓冲区中,当写入的数据达到设定的阈值时,系统将会启动一个线程将缓冲区的数据写到磁盘,这个过程叫做spill。

  在spill写入之前,会先进行二次排序,首先根据数据所属的partition进行排序,然后每个partition中的数据再按key来排序。partition的目是将记录划分到不同的Reducer上去(转者注:Partitioner只有一个, 但是partition的数目等于reducer的数目),以期望能够达到负载均衡,以后的Reducer就会根据partition来读取自己对应的数据。接着运行combiner(如果设置了的话),combiner的本质也是一个Reducer,其目的是对将要写入到磁盘上的文件先进行一次处理,这样,写入到磁盘的数据量就会减少。最后将数据写到本地磁盘产生spill文件(spill文件保存在{mapred.local.dir}指定的目录中,Map任务结束后就会被删除)。

  最后,每个Map任务可能产生多个spill文件,在每个Map任务完成前,会通过多路归并算法将这些spill文件归并成一个文件。至此,Map的shuffle过程就结束了。

二、Reduce端的shuffle

  Reduce端的shuffle主要包括三个阶段,copy、sort(merge)和reduce。(转者注:有的时候map没有到达100%, 就看到reducer的百分比开始的原因就是这个进度包括copy的过程, 这时并没有真的开始sort)

  首先要将Map端产生的输出文件拷贝到Reduce端,但每个Reducer如何知道自己应该处理哪些数据呢?因为Map端进行partition的时候,实际上就相当于指定了每个Reducer要处理的数据(partition就对应了Reducer),所以Reducer在拷贝数据的时候只需拷贝与自己对应的partition中的数据即可。每个Reducer会处理一个或者多个partition,但需要先将自己对应的partition中的数据从每个Map的输出结果中拷贝过来。

  接下来就是sort阶段,也成为merge阶段,因为这个阶段的主要工作是执行了归并排序。从Map端拷贝到Reduce端的数据都是有序的,所以很适合归并排序。最终在Reduce端生成一个较大的文件作为Reduce的输入。

  最后就是Reduce过程了,在这个过程中产生了最终的输出结果,并将其写到HDFS上。

本文基于hadoop1.2.1

如有错误,还请指正

参考文章:《Hadoop权威指南》 Tom White

转载请注明出处:hadoop运行原理之shuffle - 有无之中 - 博客园http://www.cnblogs.com/gwgyk/p/3997849.html 

Hadoop运行原理之Spill, Shuffle相关推荐

  1. Spark Shuffle运行原理

    1.什么是spark shuffle? Shuffle中文意思就是"洗牌",在Spark中Shuffle的目的是为了保证每一个key所对应的value都会汇聚到同一个分区上去聚合和 ...

  2. Hadoop基础-Hdfs各个组件的运行原理介绍

    Hadoop基础-Hdfs各个组件的运行原理介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.NameNode工作原理(默认端口号:50070) 1>.什么是NameN ...

  3. spark on yarn 完全分布式_Spark编程笔记(1)-架构基础与运行原理

    引言 根据IBM前首席执行官郭士纳的观点,IT领域每隔十五年就会迎来一 次重大变革 .当前我们正处于第三次信息浪潮(2010年前后),物联网.云计算和大数据技术突飞猛进. 信息爆炸是我们当前所需要解决 ...

  4. hadoop 运行java类_hadoop运行java类

    使用hadoop运行自己写的java类报错: /home/hadoop/bin/hadoop MaxTemperature /home/hadoop/input/sample.txt output E ...

  5. spark 任务运行原理

    调优概述 在开发完Spark作业之后,就该为作业配置合适的资源了.Spark的资源参数,基本都可以在spark-submit命令中作为参数设置.很多Spark初学者,通常不知道该设置哪些必要的参数,以 ...

  6. flink运行原理_浅谈Flink分布式运行时和数据流图的并行化

    本文将以WordCount的案例为主线,主要介绍Flink的设计和运行原理.关于Flink WordCount程序可以参考我之前的文章:读取Kafka实时数据流,实现Flink WordCount.阅 ...

  7. spark启动的worker节点是localhost_Spark大数据在线培训:Spark运行原理解析

    在大数据技术框架当中,Spark是继Hadoop之后的又一代表性框架,也是学习大数据当中必学的重点技术框架.在这些年的发展当中,Spark所占据的市场地位,也在不断拓展.今天的Spark大数据在线培训 ...

  8. 信用评分系统运行原理下篇

    前言 信用评分系统运行原理上篇 信用评分系统运行原理中篇-分箱逻辑 绘制相关性系数热力图 corr = train.corr() # 计算各变量的相关性系数xticks = ['x0','x1','x ...

  9. HiveQL学习笔记(一):Hive安装及Hadoop,Hive原理简介

    本系列是本人对Hive的学习进行一个整理,主要包括以下内容: 1.HiveQL学习笔记(一):Hive安装及Hadoop,Hive原理简介 2.HiveQL学习笔记(二):Hive基础语法与常用函数 ...

最新文章

  1. SpringBoot项目打包war部署到服务器去掉项目名所遇到的坑
  2. 解决vue版本不匹配的问题 Vue packages version mismatch:
  3. php xdebug安装配置与调试php技巧
  4. oracle 赋值到cmd,CMD操作oracle数据导库过程图解
  5. 干货!请码住——点此领取免费开源框架
  6. vue 修改项目启动后的页面_vue项目打包后打开页面空白解决办法
  7. 【毕业答辩】如何制作优秀的毕业论文答辩PPT?
  8. PDF权限密码怎么解除
  9. Windows 10 修改文件夹图标
  10. 两种储能器件 电容和电感 课堂笔记
  11. 知识树软件的IPO图
  12. 6.26 mongoDB是无法find未初始的值的,mongoose的Schema需具象化及个人商品Schema设计,租赁网登录态初次尝试,vue对对象未赋初值的监听,forEach等api深拷贝问题
  13. NVIDIA GeForce GTX 1060 驱动安装--------TensorFlow系列学习笔记(一)
  14. 青柠开车Spring Cloud(七) —— 断路器 Hystrix
  15. 天空卫士参与编写的《数据安全治理实践指南(2.0)》正式发布
  16. 【ketlle】本地开发kitlle job提交至linux生产环境上执行流程
  17. 黑马程序员——C语言基础--数组和字符串
  18. Java实现网页浏览次数
  19. 浏览器性能和兼容性测试
  20. java集成paypal支付,含Android,服务端代码

热门文章

  1. 程序猿如何找到自己心仪的对象?
  2. java.lang.ClassNotFoundException: org.springframework.web.context.request.Reques
  3. 无线数传模块DTU终端
  4. CodeIgniter表单验证:从头到尾
  5. 移动端上下滑动事件之--坑爹的touch.js
  6. [转]2006年it人士必去的10个网站
  7. 访存控制信号——IO/M(M上方带横杠)
  8. 生物学重复好不好--看看样本相关性
  9. antirez:Redis6真的来了
  10. Postgressql获取当前系统的年份及上一年和下一年