如果对Hadoop的shuffle机制有所了解的人都知道,map所产生的中间数据在送给reduce进行处理之前是要经过排序的。具体过程实际上是快速排序,堆排序和归并排序的完美结合。
首先,当map函数处理完输入数据之后,会将中间数据存在本机的一个或者几个文件当中,并且针对这些文件内部的记录进行一次快速排序,这里的排序是升序排序。在map任务将所有的中间数据写放本地文件并进行快速排序之后,系统会对这些排好序的文件做一次归并排序,并将排好序的结果输出到一个大的文件当中。这段代码是在MapTask的内部类MapOutputBuffer中实现的,其中归并排序是调用了Merge类的merge方法,具体过程下面将会详细叙述。
当map阶段完成后,系统会启动reduce过程。reduce过程会把这些由map输出的中间文件拷贝到本地。然后生成一个或者几个Segment类的实例,以下我们称这些实例为segment。Segment类封装了这些中间数据的操作,比如读取记录等。在reduce端,这些中间数据可以存在内存中,也可以存在硬盘中。同时,系统还会启动两个merge(归并)线程,一个针对内存中的segment进行归并,一个针对硬盘中的segment进行归并。merge过程实际上就是调用了Merge的merge方法。
Merge类的merge方法生成了一个MergeQueue类实例,并且调用了该类的merge方法。MergeQueue类是PriorityQueue类的一个子类,同时实现了RawKeyValueIterator接口。PriorityQueue类实际是一个小根堆,而MergeQueue的merge方法实际上就是将segment对象存储进父类的数据结构中,并且建立一个小根堆的过程。因此,hadoop的归并和排序不是两个分开的过程,,而是一个过程。在将segment归并的同时进行了排序。
需要注意的是,这里针对segment排序的过程是以segment为单位的,而不是以segment中存储的记录(record)为单位的。而这里排序过程中对两个segment对象的比较是对segment中存储的第一个记录的键的比较。也就是说假设有两个segment,一个叫a,一个叫b,a<b仅仅是因为a的第一个记录的键小于b的第一个记录的键。具体的比较方法由用户实义的comparator类实义。具体的比较过程在MergeQueue类中的lessThan方法中定义。
现在,我们已经得到了一个以segment为单位,以segment中第一记录的键为比较依据的小根堆,至此在系统中所谓的sort阶段就已经结束了。
接下来,系统会不停的从这个小根堆里取出位于根节点的segment的第一个记录交给reduce函数处理。注意,因为该小根堆是以每一个segment的第一个记录的键为排序依据的,所以根节点的第一个记录的键一定是所有segment中第一个记录的键的最小值。由于segment存储的是map输出的数据,而这些数据在传送给reduce之前已经经过排序(升序),所以,每个segment的第一个记录的键一定是该segment中所有键的最小值。从而根segment的第一个记录的键一定是所有记录的键的最小值。这里实际就是利用了归并排序。在从根segment中取出第一个记录之后,系统还会对该小根堆进行调整,以保证小根堆的性质。
以上是shuffle过程中排序的完整过程。虽然在hadoop的shuffle过程中有一个明确的sort阶段,但是实际上可以看出中间数据的排序是贯穿于整个shuffle阶段的。
-----------------------------------------------------------------------------------
原文:http://blog.csdn.net/riverm/article/details/6883606
相关推荐
Hadoop Mapreduce过程shuffle过程全解析,Shuffle过程
hadoop学习笔记-shuffle和排序 shuffle是指将map输出作为输入传给reduce的过程。
简单说一下hadoop和spark的shuffle过程
基于Hadoop技术的大数据就业岗位数据分析 作者:梁天友 邱敏 来源:《电脑知识与技术》2021年第31期 基于Hadoop技术的大数据就业岗位数据分析全文共10页,当前为第1页。 基于Hadoop技术的大数据就业岗位数据分析全文...
针对本次实验,我们需要用到Hadoop集群作为模拟大数据的分析软件,集群环境必须要包括,hdfs,hbase,hive,flume,sqoop等插件,最后结合分析出来的数据进行可视化展示,需要用到Python(爬取数据集,可视化展示)...
NULL 博文链接:https://wmwork2010.iteye.com/blog/632016
云计算大作业使用Hadoop对美国新冠肺炎疫情数据分析项目。 实验内容 统计指定日期下,美国每个州的累计确诊人数和累计死亡人数。 对实验1的结果按累计确诊人数进行倒序排序。(重写排序规则) 对实验1的结果再运算,...
基于Hadoop网站流量日志数据分析系统 1、典型的离线流数据分析系统 2、技术分析 - Hadoop - nginx - flume - hive - mysql - springboot + mybatisplus+vcharts nginx + lua 日志文件埋点的 基于Hadoop网站流量...
针对煤炭销售数据量大而信息量少的问题,开发了基于Hadoop平台的OLAP煤炭销售数据分析系统,介绍了系统设计思想及架构,并以销售量统计为例阐述了实现数据深层次快速挖掘和直观显示的具体过程。该系统利用Hadoop云平台...
Hadoop豆瓣电影数据分析(Hadoop)操作源码
Hadoop 大数据方向 mapreduce计算中的二次排序,讲解透彻
是大数据课程大作业,基于Hadoop的电影影评数据分析,需要安装Hadoop,了解MapReduce 和HDFS。
(这是Hadoop的基础) ...3./etc/host 里配置 master和slaves 4.修改/etc/hostname 主机名 5、/etc/profile的java和Hadoop配置路径 ...3.最后发现是hdfs中存在上次的数据,删掉即可。: 安装ssh和解决jdk找不到path问腿
hadoop构建数据仓库实践
Hadoop与ETL技术在视频数据中的应用,Hadoop与ETL技术在视频数据中的应用
基于Hadoop的计算机分布式存储与数据分发设计.pdf基于Hadoop的计算机分布式存储与数据分发设计.pdf基于Hadoop的计算机分布式存储与数据分发设计.pdf基于Hadoop的计算机分布式存储与数据分发设计.pdf基于Hadoop的...
基于Hadoop的计算机分布式存储与数据分发设计.docx基于Hadoop的计算机分布式存储与数据分发设计.docx基于Hadoop的计算机分布式存储与数据分发设计.docx基于Hadoop的计算机分布式存储与数据分发设计.docx基于Hadoop的...
hadoop权威指南里全文贯穿案例提到的气象数据, 直接从附录提到的网站下载非常慢. 这里分享出来, 便于大家测试. 由于限制文件大小, 所以上传了1901-1942 年的数据, 对于测试学习足够了. 如果觉得少, 多复制几次, 将...
第五天 hadoop2.x中HA机制的原理和全分布式集群安装部署及维护 01-zookeeper.avi 02-zookeeper2.avi 03-NN高可用方案的要点1.avi 04-hadoop-HA机制的配置文件.avi 05-hadoop分布式集群HA模式部署.avi 06-hdfs...