Hadoop大数据技术课程总结
1.大数据概述
1.1大数据时代的4V
数据量大Volume
第一个特征是数据量大。大数据的起始计量单位可以达到P(1000个T)、E(100万个T)或Z(10亿个T)级别。
类型繁多(Variety)
第二个特征是数据类型繁多。包括网络日志、音频、视频、图片、地理位置信息等等,多类型的数据对数据的处理能力提出了更高的要求。
价值密度低(Value)
第三个特征是数据价值密度相对较低。如随着物联网的广泛应用,信息感知无处不在,信息海量,但价值密度较低,如何通过强大的机器算法更迅速地完成数据的价值"提纯",是大数据时代亟待解决的难题。
速度快、时效高(Velocity)
第四个特征是处理速度快,时效性要求高。这是大数据区分于传统数据挖掘最显著的特征。既有的技术架构和路线,已经无法高效处理如此海量的数据,而对于相关组织来说,如果投入巨大采集的信息无法通过及时处理反馈有效信息,那将是得不偿失的。可以说,大数据时代对人类的数据驾驭能力提出了新的挑战,也为人们获得更为深刻、全面的洞察能力提供了前所未有的空间与潜力。
1.2大数据时代的三次浪潮
第一波浪潮
第一波浪潮起源于90年代,当时从计算机到软件大多还是企业级的,而数据分析就已经开始,这个时代也还是集中式软件时代,存储数据的成本也非常昂贵,所以大部分企业以KPI角度,抽取少量结构化数据,采取特定数据。代表企业如MicroStrategy、Microsoft、Oracle,代表产品诸如Sybase、Congos。这个时代能产生的数据有限,能处理数据的能力有限。
第二波浪潮
发展到2000年左右,互联网的兴起,带动了计算机和软件从工具型走向消费级,由于互联网基础设施的发展,以下三点带来了数据的爆发式增长。1) 网络带宽的升级优化,从2g到4g,从拨号上网到光纤入户。2) 围绕互联网信息化带来大量的数据产生,如门户网站,社交平台,内容和视频平台等。3) 科技发展,从PC到移动设备到各种智能设备,都可以采集传输数据。数据的存储成本越来越低,数据的产生速度越来越快,数据量越来越大,第一波浪潮时的技术体系无法满足需求,并且由于摩尔定律基础硬件设备和条件也在优化,处理数据的能力越来越强,此时带来了大数据平台第二波浪潮的发展:
第三波浪潮
发展到2010左右,互联网发展从信息化走向了服务化,创业方向也从之前的“门户时代”、“社交时代”,“垂直化门户时代”,“内容视频时代”走向了电商、 出行、外卖、O2O等本地服务。如果说面向信息化的时代更多的是基于流量广告等商业模式,面向服务化时代更多的是直接面对客户价值的变现商业模式,或者说 消费者服务,所以从行业发展来看,服务类对分析的需求也要旺盛很多。我们可以用破木桶蓄水过程来类比,到处都是水源的时候,并且外部水源流入率大于自身流失率的时候,更多的思考的是抓紧圈水源而不是找短板。从2000年到2014年,流量势头猛进,到处都是用户,对于企业而言更多的思考是如何圈用户,而不是如何留住用户并去分析流失原因。当外部没有更多水源进入并且四处水源有限的时候,我们需要的是尽可能修复木桶,并且找到木桶的短板。在2014到2015年之间,互联网流量红利也初现消退 之势,国内的经济下行压力也逐渐增大,就好比水源有限一样,企业更多的需要分析自身原因了,去提高各种转化率,增加用户的忠诚度和黏性,减少用户的流失。 因此分析需求开始逐步提升,各个业务部门也都需要自我分析优化成本,提高产出和利润。过去企业更多面临的是由上而下的KPI中心化式分析,形成了分析中心化体系,基本上整个公司有统一关注的指标和数据看板,但是各业务部门的分析需要单独处理。数据分析从行业、角色、部门和场景而言,都是差异化的。比如行业上,电商关注的是购买相关指标,内容关注的是阅读相关指标,社交关注的是参与度相关指标,工 具关注的是功能使用情况。角色上,CEO关注的是整体、财务各部门的KPI;市场VP关注的是营销相关的子项目KPI;销售VP关注的是销售阶段状态和结果相关的指标;如部门上,市场关注的是投放转化率等指标;产品关注的是功能留存率等指标。如果要更充分的满足分析需求,需要从KPI中心化分析转向分析去 中心化,也就面临着又一次大数据平台的技术革新,也因此推动了大数据平台第三波浪潮的变革。
1.3大数据时代的技术支撑
虚拟化和云计算技术
美国国家标准技术研究所认为,云计算是通过网络使得一组可配置的计算资源(例如网 络、计算机、存储、应用程序、服务等)能够在任何地点进行访问的模型,资源的提供和 释放可以快速完成,管理开销低,与提供商的交互简便易行。云计算的关键技术有三大点:⑴虚拟化技术:云计算的虚拟化技术不同于传统的单一虚拟化,它是涵盖整个IT架构的,包括资 源、网络、应用和桌面在内的全系统虚拟化。⑵分布式资源管理技术:信息系统仿真系统在大多数情况下会处在多节点并发执行环境中,要保证 系统状态的正确性,必须保证分布数据的一致性。⑶并行编程技术:云计算采用并行编程模式。在并行编程模式下,并发处理、容错、数据分布、负 载均衡等细节都被抽象到一个函数库中,通过统一接口,用户大尺度的计算任务被自动并发和分布 执行,即将一个任务自动分成多个子任务,并行地处理海量数据。
基于分布式的Hadoop生态系统
分布式计算的产生:单台计算机的能力是有限的,而需要处理的问题规模在不断地增长。为此,人们开始探索用多台计 算机组成一个系统进行协同处理。因此遇到很多新问题: 网络带宽有限 当部分机器出现故障时,我们希望多机系统作为一个整体还能正常工作用户编写的程序要同时在不同的机器上运行,还要确保能够容易使用分布式计算就是为了解决这些问题而出现的。Hadoop生态系统:主流的开源分布式大数据处理软件,主要用Java语言编写,具有较好的平台移植性。关于Hadoop有几个概念需要理解清楚: HDFS 是Hadoop的分布式文件系统 MapReduce是Hadoop的一代计算资源管理和调度系统。YARN是Hadoop的二代计算资源管理和调度系统,接受任务请求,并根据请求的需要来分配 资源,调度任务的执行。除了可以执行MapReduce外,还可以执行MPI等传统并行程序。HBase是一个开源的非关系型分布式数据库(NoSQL),它参考了谷歌的BigTable建模,实 现的编程语言为 Java。它是Hadoop项目的一部分,运行于HDFS文件系统之上。Hive和Pig能让用户用较为简便的方式来查询保存在HDFS或HBase中的数据。 Mahout是用Hadoop实现的机器学习算法库,包括聚类、分类、推荐,以及线性代数中的一 些常用算法。 Spark是比MapReduce更丰富灵活的计算框架,由Scala语言编写。设计核心是一种叫做可靠 分布式数据集。
NoSQL
NoSQL数据库比SQL更满足Web应用对数据规模和读写性能的要求。 常见的NoSQL数据库大致可分为以下几类:基于列的存储,例如HBase、Cassandra等等 基于文档的存储,例如MongoDB、CouchDB等 键值对存储,分三种类型:
1.4谷歌的3篇论文
GFS :分布式文件系统
MapReduce :分布式计算引擎
BigTable :分布式列族数据库
1.5Hadoop集群规模
注意:本部分数据来源于网络,数据时间较久,但也足以说明问题。
1.百度
百度在2006年就开始关注Hadoop并开始调研和使用,在2012年其总的集群规模达到近十个。单集群超过2800台机器节点,Hadoop机器总数有上万台机器,总的存储容量超过100PB,已经使用的超过74PB,每天提交的作业数目有数千个之多,每天的输入数据量已经超过7500TB,输出超过1700TB。
百度的Hadoop集群为整个公司的数据团队、大搜索团队、社区产品团队、广告团队,以及LBS团体提供统一的计算和存储服务,主要应用包括:
数据挖掘与分析
日志分析平台
数据仓库系统
推荐引擎系统
用户行为分析系统
同时百度在Hadoop的基础上还开发了自己的日志分析平台、数据仓库系统,以及统一的C++编程接口,并对Hadoop进行深度改造,开发了HadoopC++扩展HCE系统。
2.阿里巴巴(旧的数据,现在已转而使用阿里云了)
阿里巴巴的Hadoop集群截至2012年大约有3200台服务器,大约30?000物理CPU核心,总内存100TB,总的存储容量超过60PB,每天的作业数目超过150?000个,每天hivequery查询大于6000个,每天扫描数据量约为7.5PB,每天扫描文件数约为4亿,存储利用率大约为80%,CPU利用率平均为65%,峰值可以达到80%。阿里巴巴的Hadoop集群拥有150个用户组、4500个集群用户,为淘宝、天猫、一淘、聚划算、CBU、支付宝提供底层的基础计算和存储服务,主要应用包括:
数据平台系统
搜索支撑
广告系统
数据魔方
量子统计
淘数据
推荐引擎系统
搜索排行榜
为了便于开发,其还开发了WebIDE继承开发环境,使用的相关系统包括:Hive、Pig、Mahout、Hbase等。
3.腾讯
腾讯也是使用Hadoop最早的中国互联网公司之一,截至2012年年底,腾讯的Hadoop集群机器总量超过5000台,最大单集群约为2000个节点,并利用Hadoop-Hive构建了自己的数据仓库系统TDW,同时还开发了自己的TDW-IDE基础开发环境。腾讯的Hadoop为腾讯各个产品线提供基础云计算和云存储服务,其支持以下产品:
腾讯社交广告平台。
搜搜(SOSO)。
拍拍网。
腾讯微博。
腾讯罗盘。
QQ会员。
腾讯游戏支撑。
QQ空间。
朋友网。
腾讯开放平台。
财付通。
手机QQ。
QQ音乐。
4.奇虎360
奇虎360主要使用Hadoop-HBase作为其搜索引擎so.com的底层网页存储架构系统,360搜索的网页可到千亿记录,数据量在PB级别。截至2012年年底,其HBase集群规模超过300节点,region个数大于10万个,使用的平台版本如下。
HBase版本:facebook0.89-fb。
HDFS版本:facebookHadoop-20。
奇虎360在Hadoop-HBase方面的工作主要为了优化减少HBase集群的启停时间,并优化减少RS异常退出后的恢复时间。
5.华为
华为公司也是Hadoop主要做出贡献的公司之一,排在Google和Cisco的前面,华为对Hadoop的HA方案,以及HBase领域有深入研究,并已经向业界推出了自己的基于Hadoop的大数据解决方案。
6.中国移动
中国移动于2010年5月正式推出大云BigCloud1.0,集群节点达到了1024。中国移动的大云基于Hadoop的MapReduce实现了分布式计算,并利用了HDFS来实现分布式存储,并开发了基于Hadoop的数据仓库系统HugeTable,并行数据挖掘工具集BC-PDM,以及并行数据抽取转化BC-ETL,对象存储系统BC-ONestd等系统,并开源了自己的BC-Hadoop版本。
中国移动主要在电信领域应用Hadoop,其规划的应用领域包括:
经分KPI集中运算。
经分系统ETL/DM。
结算系统。
信令系统。
云计算资源池系统。
物联网应用系统。
E-mail。
IDC服务等。
7.Facebook
Facebook使用Hadoop存储内部日志与多维数据,并以此作为报告、分析和机器学习的数据源。目前Hadoop集群的机器节点超过1400台,共计11200个核心CPU,超过15PB原始存储容量,每个商用机器节点配置了8核CPU,12TB数据存储,主要使用StreamingAPI和JavaAPI编程接口。Facebook同时在Hadoop基础上建立了一个名为Hive的高级数据仓库框架,Hive已经正式成为基于Hadoop的Apache一级项目。此外,还开发了HDFS上的FUSE实现。
1.6Hadoop安装过程
1)安装centos7或ubuntu16.04系统
2)修改 IP
3)修改 host 主机名
4)配置 SSH 免密码登录
5)关闭防火墙
6)安装 JDK
7)解压 hadoop 安装包
8)配置 hadoop 的核心文件 hadoop-env.sh,core-site.xml,mapred-site.xml,hdfs-site.xml
9)配置 hadoop 环境变量
10)格式化 hadoop namenode-format
11)启动节点 start-all.sh
2.HDFS专题
2.1 HDFS简介及作用
HDFS(Hadoop Distributed File System,Hadoop分布式文件系统),它是一个高度容错性的系统,适合部署在廉价
的机器上。HDFS能提供高吞吐量的数据访问,适合那些有着超大数据集(large data set)的应用程序。
HDFS的设计特点是:
1、大数据文件,非常适合上T级别的大文件或者一堆大数据文件的存储,如果文件只有几个G甚至更小就没啥意思了。 2、文件分块存储,HDFS会将一个完整的大文件平均分块存储到不同计算器上,它的意义在于读取文件时可以同时从多个主机取不同区块的文件,多主机读取比单主机读取效率要高得多得多。 3、流式数据访问,一次写入多次读写,这种模式跟传统文件不同,它不支持动态改变文件内容,而是要求让文件一次写入就不做变化,要变化也只能在文件末添加内容。 4、廉价硬件,HDFS可以应用在普通PC机上,这种机制能够让给一些公司用几十台廉价的计算机就可以撑起一个大数据集群。 5、硬件故障,HDFS认为所有计算机都可能会出问题,为了防止某个主机失效读取不到该主机的块文件,它将同一个文件块副本分配到其它某几个主机上,如果其中一台主机失效,可以迅速找另一块副本取文件。
重要特性:
1.HDFS中的文件在物理上是分块存储(block),块的大小可以通过配置参数( dfs.blocksize)来规定,默认大小在hadoop2.x版本中是128M,老版本中是64M 2.HDFS文件系统会给客户端提供一个统一的抽象目录树,客户端通过路径来访问文件 3.目录结构及文件分块信息(元数据)的管理由namenode节点承担——namenode是HDFS集群主节点,负责维护整个hdfs文件系统的目录树,以及每一个路径(文件)所对应的block块信息(block的id,及所在的datanode服务器) 4.文件的各个block的存储管理由datanode节点承担----datanode是HDFS集群从节点,每一个block都可以在多个datanode上存储多个副本(副本数量也可以通过参数设置dfs.replication) 5.HDFS是设计成适应一次写入,多次读出的场景,且不支持文件的修改
2.2 HDFS架构
先放上2张图:
2.3HDFS服务角色
Namenode
namenode又称为名称节点,是负责管理分布式文件系统的命名空间(Namespace),保存了两个核心的数据结构,即FsImage和EditLog。 你可以把它理解成大管家,它不负责存储具体的数据。
FsImage用于维护文件系统树以及文件树中所有的文件和文件夹的元数据 操作日志文件EditLog中记录了所有针对文件的创建、删除、重命名等操作 注意,这个两个都是文件,也会加载解析到内存中。
为啥会拆成两个呢? 主要是因为fsimage这个文件会很大的,多了之后就不好操作了,就拆分成两个。把后续增量的修改放到EditLog中, 一个FsImage和一个Editlog 进行合并会得到一个新的FsImage.FsImage就相当于你系统的引导区,如果FsImage坏了,那文件系统就崩溃了。 所以,这个重要的东西,需要备份。备份的功能就交给SecondaryNameNode实现
SecondaryNameNode
SecondaryNameNode工作过程
SecondaryNameNode会定期和NameNode通信,请求其停止使用EditLog文件,暂时将新的写操作写到一个新的文件edit.new上来,这个操作是瞬间完成,上层写日志的函数完全感觉不到差别;
SecondaryNameNode通过HTTP GET方式从NameNode上获取到FsImage和EditLog文件,并下载到本地的相应目录下;
SecondaryNameNode将下载下来的FsImage载入到内存,然后一条一条地执行EditLog文件中的各项更新操作,使得内存中的FsImage保持最新;这个过程就是EditLog和FsImage文件合并;
SecondaryNameNode执行完(3)操作之后,会通过post方式将新的FsImage文件发送到NameNode节点上
NameNode将从SecondaryNameNode接收到的新的FsImage替换旧的FsImage文件,同时将edit.new替换EditLog文
- 件,通过这个过程EditLog就变小了
DataNode
datanode数据节点,用来具体的存储文件,维护了blockId 与 datanode本地文件的映射。 需要不断的与namenode节点通信,来告知其自己的信息,方便nameode来管控整个系统。这里还提到一个块的概念,就想linux本地文件系统中也有块的概念一样,这里也有块的概念。这里的块会默认是128m 每个块都会默认储存三份。
2.4 HDFS 如何读取文件
HDFS的文件读取原理,主要包括以下几个步骤:
首先调用FileSystem对象的open方法,其实获取的是一个DistributedFileSystem的实例。
DistributedFileSystem通过RPC(远程过程调用)获得文件的第一批block的locations,同一block按照重复数会返回多个locations,这些locations按照hadoop拓扑结构排序,距离客户端近的排在前面。
前两步会返回一个FSDataInputStream对象,该对象会被封装成 DFSInputStream对象,DFSInputStream可以方便的管理datanode和namenode数据流。客户端调用read方法,DFSInputStream就会找出离客户端最近的datanode并连接datanode。
数据从datanode源源不断的流向客户端。
如果第一个block块的数据读完了,就会关闭指向第一个block块的datanode连接,接着读取下一个block块。这些操作对客户端来说是透明的,从客户端的角度来看只是读一个持续不断的流。
如果第一批block都读完了,DFSInputStream就会去namenode拿下一批blocks的location,然后继续读,如果所有的block块都读完,这时就会关闭掉所有的流。
2.5 HDFS 如何写文件
HDFS的文件写入原理,主要包括以下几个步骤:
客户端通过调用 DistributedFileSystem 的create方法,创建一个新的文件。
DistributedFileSystem 通过 RPC(远程过程调用)调用 NameNode,去创建一个没有blocks关联的新文件。创建前,NameNode 会做各种校验,比如文件是否存在,客户端有无权限去创建等。如果校验通过,NameNode 就会记录下新文件,否则就会抛出IO异常。
前两步结束后会返回 FSDataOutputStream 的对象,和读文件的时候相似,FSDataOutputStream 被封装成 DFSOutputStream,DFSOutputStream 可以协调 NameNode和 DataNode。客户端开始写数据到DFSOutputStream,DFSOutputStream会把数据切成一个个小packet,然后排成队列 data queue。
DataStreamer 会去处理接受 data queue,它先问询 NameNode 这个新的 block 最适合存储的在哪几个DataNode里,比如重复数是3,那么就找到3个最适合的 DataNode,把它们排成一个 pipeline。DataStreamer 把 packet 按队列输出到管道的第一个 DataNode 中,第一个 DataNode又把 packet 输出到第二个 DataNode 中,以此类推。
DFSOutputStream 还有一个队列叫 ack queue,也是由 packet 组成,等待DataNode的收到响应,当pipeline中的所有DataNode都表示已经收到的时候,这时akc queue才会把对应的packet包移除掉。
客户端完成写数据后,调用close方法关闭写入流。
DataStreamer 把剩余的包都刷到 pipeline 里,然后等待 ack 信息,收到最后一个 ack 后,通知 DataNode 把文件标示为已完成。
2.6HDFS 副本存放策略
namenode如何选择在哪个datanode 存储副本(replication)?
这里需要对可靠性、写入带宽和读取带宽进行权衡。Hadoop对datanode存储副本有自己的副本策略,在其发展过程中一共有两个版本的副本策略,分别如下所示
2.7HDFS基本命令
查看文件常用命令 hdfs dfs -ls path #查看文件列表 hdfs dfs -ls -R path #递归查看文件列表 hdfs dfs -du path #查看path下的磁盘情况,单位字节 创建文件夹 hdfs dfs -mkdir path 创建文件 hdfs dfs -touchz path hdfs dfs -touchz /user/iron/iron.txt #该命令不可递归创建文件,即当该文件的上级目录不存在时无法创建该文件,如果重复创建会覆盖原有的内容 复制文件和目录 hdfs dfs -cp 源目录 目标目录 hdfs dfs -cp /user/iron /user/iron01 #该命令会将源目录的整个目录结构都复制到目标目录中 hdfs dfs -cp /user/iron/* /user/iron01 #该命令只会将源目录中的文件及其文件夹都复制到目标目录中 移动文件和目录 hdfs dfs -mv 源目录 目标目录 hdfs dfs -mv /user/iron /user/iron01 hdfs dfs -mv /user/aa.txt /user/bb.txt #将/user/aa.txt文件重命名为/user/bb.txt 赋予权限 hdfs dfs -chmod [权限参数][拥有者][:[组]] path hdfs dfs -chmod 777 /user/* #该命令是将user目录下的所用文件及其文件夹(不包含子文件夹中的文件)赋予最高权限:读,写,执行 777表示该用户,该用户的同组用户,其他用户都具有最高权限 上传文件 hdfs dfs -put 源文件夹 目标文件夹 hdfs dfs -put /home/hadoop01/iron /user/iron01 #该命令上传Linux文件系统中iron整个文件夹 hdfs dfs -put /home/hadoop01/iron/* /user/iron01 #该命令上传Linux文件系统中iron文件夹中的所有文件(不包括文件夹) 下载文件 hdfs dfs -get 源文件夹 目标文件夹 hdfs dfs -get /user/iron01 /home/hadoop01/iron #该命令下载hdfs文件系统中的iron01整个文件夹到Linux文件系统中 hdfs dfs -get /user/iron01/* /home/hadoop01/iron #该命令下载hdfs文件系统中的iron01整个文件夹到Linux文件系统中(不包含文件夹) 查看文件内容 hadoop fs -cat path #从头查看这个文件 hadoop fs -tail path #从尾部查看最后1K hadoop fs -cat /userjzl/home/book/aa.txt #查看/userjzl/home/book目录下文件aa.txt的内容(将-cat 换成-text效果一样) hadoop fs -tail /userjzl/home/book/aa.txt 删除文件 hdfs dfs -rm 目标文件 #rm不可以删除文件夹 hdfs dfs -rm -R 目标文件 #递归删除(慎用) hdfs dfs -rm /user/test.txt #删除test.txt文件 hdfs dfs -rm -R /user/testdir #递归删除testdir文件夹
3.MapReduce专题
3.1.三个层面上的基本构思
1.如果对付大数据处理:分而治之
对相互之间不具有计算依赖关系的大数据,实现并行最自然的办法就是采取分而治之的策略。
2.上升到抽象模型:Mapper与Reduce
MPI等并行计算方法缺少高层并行编程模型,程序员需要自行指定存储,计算,分发等任务,为了克服这一缺陷,MapReduce借鉴了Lisp函数式语言中的思想,用Map和Reduce两个函数提供了高层的并发编程模型抽象。
3.上升到架构:统一架构,为程序员隐藏系统层细节
MPI等并行计算方法缺少统一的计算框架支持,程序员需要考虑数据存储、划分、分发、结果收集、错误恢复等诸多细节;为此,MapReduce设计并提供了同意的计算框架,为程序员隐藏了绝大多数系统层面的处理系统。
3.2.一个MapReduce的完整过程
在MapReduce整个过程可以概括为以下过程:
输入 --> map --> shuffle --> reduce -->输出
输入文件会被切分成多个块,每一块都有一个map task
map阶段的输出结果会先写到内存缓冲区,然后由缓冲区写到磁盘上。默认的缓冲区大小是100M,溢出的百分比是0.8,也就是说当缓冲区中达到80M的时候就会往磁盘上写。如果map计算完成后的中间结果没有达到80M,最终也是要写到磁盘上的,因为它最终还是要形成文件。那么,在往磁盘上写的时候会进行分区和排序。一个map的输出可能有多个这个的文件,这些文件最终会合并成一个,这就是这个map的输出文件。
流程说明如下:
1、输入文件分片,每一片都由一个MapTask来处理
2、Map输出的中间结果会先放在内存缓冲区中,这个缓冲区的大小默认是100M,当缓冲区中的内容达到80%时(80M)
会将缓冲区的内容写到磁盘上。也就是说,一个map会输出一个或者多个这样的文件,如果一个map输出的全部内容没有超过限制,那么最终也会发生这个写磁盘的操作,只不过是写几次的问题。
3、从缓冲区写到磁盘的时候,会进行分区并排序,分区指的是某个key应该进入到哪个分区,同一分区中的key会进行排序,如果定义了Combiner的话,也会进行combine操作
4、如果一个map产生的中间结果存放到多个文件,那么这些文件最终会合并成一个文件,这个合并过程不会改变分区数量,只会减少文件数量。例如,假设分了3个区,4个文件,那么最终会合并成1个文件,3个区
5、以上只是一个map的输出,接下来进入reduce阶段
6、每个reducer对应一个ReduceTask,在真正开始reduce之前,先要从分区中抓取数据
7、相同的分区的数据会进入同一个reduce。这一步中会从所有map输出中抓取某一分区的数据,在抓取的过程中伴随着排序、合并。
8、reduce输出
3.3.MR的shuffle环节
在Map端的shuffle过程是对Map的结果进行分区、排序、分割,然后将属于同一划分(分区)的输出合并在一起并写在磁盘上,最终得到一个分区有序的文件,分区有序的含义是map输出的键值对按分区进行排列,具有相同partition值的键值对存储在一起,每个分区里面的键值对又按key值进行升序排列(默认),其流程大致如下:
Map的输出给进入Shuffle环节:Shuffle环节如下: