hadoop的shuffle过程
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过程的更多相关文章
- Hadoop学习笔记—10.Shuffle过程那点事儿
一.回顾Reduce阶段三大步骤 在第四篇博文<初识MapReduce>中,我们认识了MapReduce的八大步骤,其中在Reduce阶段总共三个步骤,如下图所示: 其中,Step2.1就 ...
- 剖析Hadoop和Spark的Shuffle过程差异
一.前言 对于基于MapReduce编程范式的分布式计算来说,本质上而言,就是在计算数据的交.并.差.聚合.排序等过程.而分布式计算分而治之的思想,让每个节点只计算部分数据,也就是只处理一个分片,那么 ...
- 剖析Hadoop和Spark的Shuffle过程差异(一)
一.前言 对于基于MapReduce编程范式的分布式计算来说,本质上而言,就是在计算数据的交.并.差.聚合.排序等过程.而分布式计算分而治之的思想,让每个节点只计算部分数据,也就是只处理一个分片,那么 ...
- Hadoop MapReduce的Shuffle过程
一.概述 理解Hadoop的Shuffle过程是一个大数据工程师必须的,笔者自己将学习笔记记录下来,以便以后方便复习查看. 二. MapReduce确保每个reducer的输入都是按键排序的.系统执行 ...
- Shuffle过程
Shuffle过程 在MapReduce框架中,shuffle是连接Map和Reduce之间的桥梁,Map的输出要用到Reduce中必须经过shuffle这个环节,shuffle的性能高低直接影响了整 ...
- Hadoop学习之shuffle过程
转自:http://langyu.iteye.com/blog/992916,多谢分享,学习Hadopp性能调优的可以多关注一下 Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方, ...
- 【Big Data - Hadoop - MapReduce】通过腾讯shuffle部署对shuffle过程进行详解
摘要: 通过腾讯shuffle部署对shuffle过程进行详解 摘要:腾讯分布式数据仓库基于开源软件Hadoop和Hive进行构建,TDW计算引擎包括两部分:MapReduce和Spark,两者内部都 ...
- Hadoop计算中的Shuffle过程(转)
Hadoop计算中的Shuffle过程 作者:左坚 来源:清华万博 时间:2013-07-02 15:04:44.0 Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方.要想理解Ma ...
- hadoop: Shuffle过程详解 (转载)
原文地址:http://langyu.iteye.com/blog/992916 另一篇博文:http://www.cnblogs.com/gwgyk/p/3997849.html Shuffle过程 ...
随机推荐
- Vue.js基础语法(二)组件
vue学习的一系列,全部来自于表哥---表严肃,是我遇到过的讲课最通透,英文发音最好听的老师,想一起听课就去这里吧 https://biaoyansu.com/i/hzhj1206 把一段经常要用的东 ...
- Day1 了解web前端
Day1 了解web前端 一.职业发展路线: 前端页面制作.前端开发.前端架构师 二.1)前端工程师主要职责: 利用HTML/CSS/JavaScript等各种Web技术进行客户端产品的开发.完 ...
- SublimeText插件eslint : 语法检测
参考: http://www.tuicool.com/articles/faANRvj 安装之后的效果: 误用了 = ,在文件保存时就会被提示,直接顺手改掉就行了,方便的不行 步骤1:Sublime集 ...
- 移动web基础
接触retina屏 基础知识(移动Web的基础知识)排版布局(高效的移动Web布局)开发效率终端交互优化 pixel像素基础viewport视图viewport_meta标签viewport_codi ...
- Struts2_HelloWorld_7_2
第一个程序的流程图: Struts2.x 的作用:把请求和展现分开.
- hermite 相关算法整理
设f(x)f(x)在节点a≤x0,x1,⋯,xn≤ba≤x0,x1,⋯,xn≤b处的函数值为f0,f1,...,fnf0,f1,...,fn,设P(x)为f(x)P(x)为f(x)在区间[a,b][a ...
- Markdown快速上手指南
Markdown快速上手指南 1.Markdown介绍 markdown可以实现快速html文档编辑,格式优没,并且不需要使用html元素. markdown采用普通文本的形式,例如读书笔记等易于使用 ...
- Django基础--2
一.路由系统 URL 1.模板语言循环字典 1.简单的字典循环 <ul> {% for i in user_dict %} <li>{{ i }}</li> {% ...
- ubuntu 显示隐藏文件
原文链接 http://blog.csdn.net/happyjiahan/article/details/6023496 方法1.使用命令ls -a显示所有的文件,包括隐藏文件 方法2.在桌面化操作 ...
- mm struct与pgd
假如该vm_area_struct描述的是一个文件映射的虚存空间,成员vm_file便指向被映射的文件的file结构,vm_pgoff是该虚存空间起始地址在vm_file文件里面的文件偏移,单位为物理 ...