MapReduce执行流程和Shuffle过程.docx

上传人:牧羊曲112 文档编号:4886353 上传时间:2023-05-21 格式:DOCX 页数:9 大小:130.97KB
返回 下载 相关 举报
MapReduce执行流程和Shuffle过程.docx_第1页
第1页 / 共9页
MapReduce执行流程和Shuffle过程.docx_第2页
第2页 / 共9页
MapReduce执行流程和Shuffle过程.docx_第3页
第3页 / 共9页
MapReduce执行流程和Shuffle过程.docx_第4页
第4页 / 共9页
MapReduce执行流程和Shuffle过程.docx_第5页
第5页 / 共9页
亲,该文档总共9页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《MapReduce执行流程和Shuffle过程.docx》由会员分享,可在线阅读,更多相关《MapReduce执行流程和Shuffle过程.docx(9页珍藏版)》请在三一办公上搜索。

1、MapReducEsqlsffishuff-eKsffi训#茹淫 Hadoop MapReduceSH 布声JffifqlD蹈、卅醐 W MapReduces布l=g-lI la shuffQjaffiEKSainK。MapReduce 、回妄sfHI 驯斗沸邮fflsffis浦丑 MapReduceKal回修。H&oop MapReducl-rffwql弟前-Hadoop MapReduces布|=君令)1曲君幽 一 孚斗、计V苛 10 炜。幽 1 Hadoop MapReduce奋llygwlHi1. 提交作业客户端向JobTracker提交作业。首先,用户需要将所有应该配置的参数根据需求

2、配置好。 作业提交之后,就会进入自动化执行。在这个过程中,用户只能监控程序的执行情况和强制 中断作业,但是不能对作业的执行过程进行任何干预。提交作业的基本过程如下。1) 客户端通过Runjob()方法启动作业提交过程。2) 客户端通过JobTracker的getNewJobId()请求一个新的作业ID。3) 客户端检查作业的输出说明,计算作业的输入分片等,如果有问题,就抛出异常,如果 正常,就将运行作业所需的资源(如作业Jar文件,配置文件,计算所得的输入分片等) 复制到一个以作业ID命名的目录中。4) 通过调用JobTracker的submitjob()方法告知作业准备执行。2. 初始化作业

3、JobTracker在JobTracker端开始初始化工作,包括在其内存里建立一系列数据结构,来 记录这个Job的运行情况。1) JobTracker接收到对其submitJob()方法的调用后,就会把这个调用放入一个内部队 列中,交由作业调度器进行调度。初始化主要是创建一个表示正在运行作业的对象,以便跟 踪任务的状态和进程。2 )为了创建任务运行列表,作业调度器首先从HDFS中获取JobClient已计算好的输入 分片信息,然后为每个分片创建一个MapTask,并且创建ReduceTask。3. 分配任务JobTracker会向HDFS的NameNode询问有关数据在哪些文件里面,这些文件分

4、别散 落在哪些结点里面。JobTracker需要按照就近运行原则分配任务。TaskTracker定期通过心跳与JobTracker进行通信,主要是告知JobTracker自身是 否还存活,以及是否已经准备好运行新的任务等。JobTracker接收到心跳信息后如果有待分配的任务就会为TaskTracker分配一个任务, 并将分配信息封装在心跳通信的返回值中返回给TaskTracker。对于Map任务,JobTracker通常会选取一个距离其输入分片最近的TaskTracker,对于 Reduce任务,JobTracker则无法考虑数据的本地化。4. 执行任务1) TaskTracker分配到一个

5、任务后,通过HDFS把作业的Jar文件复制到TaskTracker 所在的文件系统,同时,TaskTracker将应用程序所需要的全部文件从分布式缓存复制到本 地磁盘。TaskTracker为任务新建一个本地工作目录,并把Jar文件中的内容解压到这个 文件夹中。2 )TaskTracker启动一个新的JVM来运行每个任务(包括Map任务和Reduce任务),这样,JobClient的MapReduce就不会影响TaskTracker守护进程。任务的子进程每隔 几秒便告知父进程它的进度,直到任务完成。5. 进程和状态的更新一个作业和它的每个任务都有一个状态信息,包括作业或任务的运行状态,Map任

6、务和Reduce任务的进度,计数器值,状态消息或描述。任务在运行时,对其进度保持追踪。这些消息通过一定的时间间隔由ChildJVM向TaskTracker汇聚,然后再向JobTracker 汇聚。JobTracker将产生一个表明所有运行作业及其任务状态的全局视图,用户可以通过 Web UI进行查看。JobClient通过每秒查询JobTracker来获得最新状态,并且输出到控 制台上。6. 作业的完成当JobTracker接收到的这次作业的最后一个任务已经完成时,它会将Job的状态改为 successful。当JobClient获取到作业的状态时,就知道该作业已经成功完成,然后JobClie

7、nt打印信息告知用户作业已成功结束,最后从Runjob()方法返回。HadoopMapReduce 的 Shuffle 阶段Hadoop MapReduce的Shuffle阶段是指从Map的输出开始,包括系统执行排序,以 及传送Map输出到Reduce作为输入的过程。排序阶段是指对Map端输出的Key进行排序的过程。不同的Map可能输出相同的Key ,相同的Key必须发送到同一个Reduce端处理。Shuffle阶段可以分为Map端的Shuffle阶段和Reduce端的Shuffle阶段。Shuffle阶段的工作过程,如图2所示。1. M叩端的Shuffle阶段 1)每个输入分片会让一个Map

8、任务来处理,默认情况下,以HDFS的一个块的大小(默 认为64MB)为一个分片。Map函数开始产生输出时,并不是简单地把数据写到磁盘中, 因为频繁的磁盘操作会导致性能严重下降。它的处理过程是把数据首先写到内存中的一个缓 冲区,并做一些预排序,以提升效率。2)每个Map任务都有一个用来写入输出数据的循环内存缓冲区(默认大小为100MB),当缓冲区中的数据量达到一个特定阈值(默认是80%)时,系统将会启动一个后台线程, 把缓冲区中的内容写到磁盘中(即Spill阶段)。在写磁盘过程中,Map输出继续被写到 缓冲区中,但如果在此期间缓冲区被填满,那么Map任务就会阻塞直到写磁盘过程完成。3 )在写磁盘

9、前,线程首先根据数据最终要传递到的Reduce任务把数据划分成相应的分区(Partition)o在每个分区中,后台线程按Key进行排序,如果有一个Combiner,便会在排序后的输出上运行。4)一旦内存缓冲区达到溢出写的阈值,就会创建一个溢出写文件,因此在Map任务完成 其最后一个输出记录后,便会有多个溢出写文件。在Map任务完成前,溢出写文件被合 并成一个索引文件和数据文件(多路归并排序)(Sort阶段)。5)溢出写文件归并完毕后,Map任务将删除所有的临时溢出写文件,并告知TaskTracker 任务已完成,只要其中一个Map任务完成,Reduce任务就会开始复制它的输出(Copy 阶段)

10、。6)Map任务的输出文件放置在运行Map任务的TaskTracker的本地磁盘上,它是运行 Reduce任务的TaskTracker所需要的输入数据。2. Reduce 端的 Shuffle 阶段1)Reduce进程启动一些数据复制线程,请求Map任务所在的TaskTracker以获取输 出文件(Copy阶段2)将Map端复制过来的数据先放入内存缓冲区中,Merge有3种形式,分别是内存到 内存,内存到磁盘,磁盘到磁盘。默认情况下,第一种形式不启用,第二种形式一直在运行 (Spill阶段),直到结束,第三种形式生成最终的文件(Merge阶段3)最终文件可能存在于磁盘中,也可能存在于内存中,但

11、是默认情况下是位于磁盘中的。当Reduce的输入文件已定,整个Shuffle阶段就结束了,然后就是Reduce执行,把结果放到HDFS中(Reduce阶段Hadoop MapReduce的主要特点MapReduce在设计上具有的主要技术特点如下。1. 向外”横向扩展,而非向上”纵向扩展MapReduce集群的构建完全选用价格便宜、易于扩展的低端商用服务器,而非价格昂贵、 不易扩展的高端服务器。对于大规模数据处理,由于有大量数据存储的需要,因此,基于低端服务器的集群远比基于 高端服务器的集群优越,这就是MapReduce并行计算集群会基于低端服务器实现的原因。2. 失效被认为是常态MapRedu

12、ce集群中使用大量的低端服务器,因此,结点硬件失效和软件出错是常态,因 而一个设计良好、具有高容错性的并行计算系统不能因为结点失效而影响计算服务的质量。任何结点失效都不应当导致结果的不一致或不确定性,任何一个结点失效时,其他结点要能 够无缝接管失效结点的计算任务,当失效结点恢复后应能自动无缝加入集群,而不需要管理 员人工进行系统配置。MapReduce并行计算软件框架使用了多种有效的错误检测和恢复机制,如结点自动重启技术,使集群和计算框架具有对付结点失效的健壮性,能有效处理失效结点的检测和恢复。3. 把处理向数据迁移传统高性能计算系统通常有很多处理器结点与一些外存储器结点相连如用存储区域网络连

13、 接的磁盘阵列,因此,大规模数据处理时,外存文件数据I/O访问会成为一个制约系统性 能的瓶颈。为了减少大规模数据并行计算系统中的数据通信开销,不应把数据传送到处理结点,而应当 考虑将处理向数据靠拢和迁移。MapReduce采用了数据/代码互定位的技术方法,计算结 点将首先尽量负责计算其本地存储的数据,以发挥数据本地化特点,仅当结点无法处理本地 数据时,再采用就近原则寻找其他可用计算结点,并把数据传送到该可用计算结点。4. 顺序处理数据,避免随机访问瞄大规模数据处理的特点决定了大量的数据记录难以全部存放在内存中而通常只能放在外存 中进行处理。由于磁盘的顺序访问要远比随机访问快得多,因此MapRe

14、duce主要设计为 面向顺序式大规模数据的磁盘访问处理。为了实现高吞吐量的并行处理,MapReduce可以利用集群中的大量数据存储结点同时访 问数据,以此利用分布集群中大量结点上的磁盘集合提供高带宽的数据访问和传输。5. 为应用开发者隐藏系统层细节专业程序员之所以写程序困难,是因为程序员需要记住太多的编程细节,这对大脑记忆是一 个巨大的认知负担,需要高度集中注意力,而并行程序编写有更多困难。例如,需要考虑多线程中诸如同步等复杂繁琐的细节。由于并发执行中的不可预测性,程序 的调试查错也十分困难,而且,大规模数据处理时程序员需要考虑诸如数据分布存储管理、 数据分发、数据通信和同步、计算结果收集等诸

15、多细节问题。MapReduce提供了一种抽象机制,可将程序员与系统层细节隔离开来,程序员仅需描述 需要计算什么,而具体怎么去计算就交由系统的执行框架去处理,这样程序员可从系统层细 节中解放出来,而致力于其应用本身计算问题的算法设计。6. 平滑无缝的可扩展性这里指出的可扩展性主要包括两层意义上的扩展性:数据扩展性和系统规模扩展性。理想的软件算法应当能随着数据规模的扩大而表现出持续的有效性性能上的下降程度应与 数据规模扩大的倍数相当,在集群规模上,要求算法的计算性能应能随着结点数的增加保持 接近线性程度的增长。绝大多数现有的单机算法都达不到以上理想的要求才巴中间结果数据维护在内存中的单机算 法在大规模数据处理时会很快失效从单机到基于大规模集群的并行计算从根本上需要完全 不同的算法设计。但是,MapReduce在很多情形下能实现以上理想的扩展性特征,对于很多计算问题,基 于MapReduce的计算性能可随结点数目的增长保持近似于线性的增长。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号