《-大数据技术课件第5章PPT内容-.docx》由会员分享,可在线阅读,更多相关《-大数据技术课件第5章PPT内容-.docx(11页珍藏版)》请在优知文库上搜索。
1、“大数据技术课件第5章PPT内容“1、大数据技术与应用第5章MapReduce分布式计算提纲o5.1MapReduce简介o5.2MapReduce操作实践o小结o习题25.1MapReduce简介o5.1.1MapReduce架构I和HDFS一样,MapReduce也是采纳Master/Slave的架构,其架构图如下图所示。BMapReduceMapReduce架构图架构图o它主要由ClientJobTrackerTaskTracker及Task4个部分组成:门ObTraCke负责资源监控和作业调度。JobTracker监控全部TaskTracker与job的健康状况,一旦发觉失败,就将相应
2、的2、任务转移到其他节点;同时,JobTracker会跟踪任务的执行进度、资源使用量等信息,并将这些信息告知任务调度器,而调度器会在资源消失空闲时,选择合适的任务使用这些资源。在Hadoop中,任务调度器是一个可插拔的模块,用户可以依据自己的需要设计相应的调度器。45.1MapReduce简介ITaskTracker会周期性地通过Heartbeat将本节点上资源的使用状况和任务的运行进度汇报JobTraCker,同时接收JobTraCker发送过来的命令并执行相应的操作(如启动新任务、结束任务等).TaskTracker使用slot等量划分本节点上的资源量。甸。代表计算资源(C3、PU、内存等
3、)。一个Task猎取到一个slot后才有机会运行,而Hadoop调度器的作用就是将各个TaskTracker上的空闲slot安排给Task使用。slot分为Mapslot和Reduceslot两种,分别供MapTask和ReduceTask使用。TaskTracker通过Slot数目(可配置参数)限定TaSk的并发度。55.1MaPRedUCe简介ITask分为MapTask和ReduceTask两种,均由TaskTracker启动。HDFS以固定大小的block为基本单位存储数据,而对MapReduce而言,其处理单位是split。SPIit是一个规律概念,只包4、含一些元数据信息,如数据起
4、始位置、数据长度、数据所在节点等。它的划分方法完全由用户自己打算。但需要留意的是,split的多少打算了MaPTaSk的数目,由于每个SPlit只会交给一个MapTask处理。SPlit和block的关系如下图所示。65.1MapReduce简介75.1MapReduce简介splitsplit和和blockblock的关系的关系85.1MapReduce简介IMapTask执行过程如图5-3所示。由图5-3可知,MapTask先将对应的split迭代解析成一个个key/value对,依次调用用户自定义的map()函数进行处理,最终将临时结果存5、放到本地磁盘上,其中临时数据被分成若干个Par
5、titiOn,每个partition将被一个ReduceTask处理。RedUCeTaSk执行过程如图5-4所示。该过程分为以下3个阶段。U从远程节点上读取MapTask中间结果(称为Shuffle阶段)u(2)根据key对key/value对进行排序(称为Sort阶段)。U依次读取key,valuelist,调用用户自定义的reduce。函数处理,并将最终结果保存到HDFS上(称为Reduce阶段S三5-45-4RedceTaskRedceTask执行过程执行过程9图图56、-35-3MapTaskMapTask执行过程执行过程图图5-45-4ReduceTaskReduceTask执行过程
6、执行过程5.1MapReduce简介o5.1.2MapReduce的原理IMapReduce框架的流程如图5-5所示10图图5-55-5MapReduceMapReduce框架的流程图框架的流程图5.1MapReduce简介针对上面的流程可以分为两个阶段来描述。LMap阶段u(I)InputFormat依据输入文件产生键值对,并传送到Mapper类的map函数中。UMaP输出键值对到一个没有排序的缓冲内存中。u(3)当缓冲7、内存达到给定值或map任务完成,在缓冲内存中的键值对就会被排序,然后输出到磁盘中的溢出文件u假如有多个溢出文件,那么就会整合这些文件到一个文件中,且是排序的。u这些排序过
7、的、在溢出文件中的键值对会等待Reducer的猎取。115.1MaPRedUCe简介2.Reduce阶段u(I)Reducer猎取Mapper的记录,然后产生另外的键值对,最终输出到HDFS中。UShUffle:相同的key被传送到同一个的Reducer中。U(3)当有一个Mapper完成后,Reducer就开头猎取相关数据,全部的溢出文件会被排到一个内存缓冲区中。u(4)当内存缓冲8、区满了后,就会产生溢出文件到本地磁盘。u当Reducer全部相关的数据都传输完成后,全部溢出文件就会被整合和排序。u(6)Reducer中的reduce方法针对每个key调用一次。u(7)Reducer的输出到
8、HDFSo125.1MaPRedUCe简介o5.1.3MaPRedUCe的工作机制I一、MaPRedUCe运行图如图5-6所示:13图图5-6.MapReduce5-6.MapReduce运行图运行图5.1MapReduce简介I二、运行解析1.作业的提交Ul)此方法调用SUbmito.在SUbmito方法里面连接JobTracker,即生成一个内部Job9、SUmmitter(实际上是newJobClient(),在newJObClient()里面生成一个JObSUbmiSSionProtoCol接口(JobTracker实现了此接口)对象jobSubmitClient(是它连接或对应着Jo
9、bTracker),在Submit()方法里面也调用JObClient.SubmitJobInternaI(Conf)方法返回一个RunningJob(步骤1)145.1MapReduce简介U2)参数true说明要调用方法jobClient.monitorAndPrintlob()即检查作业的运行状况(每秒一次),假如有变化就报告给掌握台jobC10、Iient.SubmitJobInternaIO所实现的提交作业过程如下u3)向Jobtracker恳求一个新的jobID(步骤2)u4)检查作业的输出路径,假如未指定或已存在则不提交作业并抛错误给程序u5)计算并生成作业的输入分片,假如路径不
10、存在则不提交作业;U6)将运行作业所需要的资源(包括作业jar文件,配置文件和计算所得的输入分片)复制到jobtracker的文件系统中以jobid命名的名目下(即HDFS中)。作业jar副本较多U7)告知jobtracker作业预备执行(真正的提交作业jobSubmitClient.submitJob()(步骤4)155.1M11、叩RedUCe简介I二、运行解析2.作业的初始化Ul)jobtracker接收到对其SUbmitIobo方法的调用后,将其放入内部队列,交由jobscheduler进行调度,并对其进行初始化,包括创建一个正在运行作业的对象-封装任务和记录信息(步骤5)u2)为了创
11、建任务运行列表,jobscheduler首先从共享文件系统中猎取已计算好的输入分片信息(步骤6),然后为每个分片创建一个map任务;u3)创建的reduce任务数量由Job的mapred.reduce.task属性打算(SetNumReduceTasksO设置),schedule创建相应数量的reduce任务。任务12、在此时被指定IDou4)除了map和reduce任务,还有SetUPJob和CIeanUPJOb需要建立:由tasktrackers在全部map开头前和全部reduce结束后分别执行,这两个方法在OUtPUtCOmmitter中(默认是FileOutputCommitter)0
12、setupJob()创建输出名目和任务的临时工作名目,CleanupJobO删除临时工作名目o165.1MapReduce简介3.作业的安排U1)每个tasktracker定期发送心跳给jobtracker,告知自己还活着,并附带消息说明自己是否已预备好接受新任务。jobtracker以此来安排任务,并使专心跳的13、返回值与tasktracker通信(步骤7)oJobtracker利用调度算法先选择一个job然后再选此job的一个task安排给tasktracker.u2)每个tasktracker会有固定数量的map和reduce任务槽,数量有tasktracker核的数量和内存大小来打算
13、。jObtraCker会先将tasktracker的全部的map槽填满,然后才填此tasktracker的reduce任务槽。u3)Jobtracker安排map任务时会选取与输入分片最近的tasktracker,安排reduce任务用不着考虑数据本地化。175.1MapReduce简介4.任务的执行用到上面提到14、的setupJob()ul)tasktracker安排到一个任务后,首先从HDFS中把作业的jar文件及运行所需要的全部文件(DiStribUtedCaChe设置的)复制到tasktracker本地(步骤8);u2)接下来tasktracker为任务新建一个本地工作名目,并把ja
14、r文件的内容解压到这个文件夹下;u3)tasktracker新建一个taskRunner实例来运行该任务(步骤9);u4)TaskRunner启动一个新的JVM来运行每个任务(步骤10),以便客户的map/reduce不会影响tasktrackero185.1MapReduce简介5.进度和状态的更新用到上面15提到的setupJob()u一个作业和它的每个任务都有一个状态,包括:作业或任务的运行状态(runningzsuccessful,failed),map和reduce的进度,计数器值,状态消息或描述。map进度标准是处理输入所占比例,reduce是Copymergereduce整个进度
15、的比例。ChildJVM有独立的线程每隔3秒检查任务更新标志,假如有更新就会报告给此tasktracker;tasktracker每隔5秒给jobtracker发心跳;jobtracker合并这些更新,产生一个表明全部运行作业及其任务状态的全局试图。JobClient.monitorAndPrintJob(16、)每秒查询这些信息。195.1MapReduce简介6.作业的完成用到上面提到的setupJob()u当jobtracker收到最终一个任务(thiswillbethespecialjobcleanuptask)的完成报告后,便把job状态设置为SUCCeSSfUI。JOb得到完成信息
16、便从WaitForCOmPletiOno返回。最终Jobtracker清空作业的工作状态,并指示tasktracker也清空作业的工作状态(如删除中间输出)。205.1MapReduce简介I三、失败解析1.任务失败U(1)子任务失败。当map或者reduce子任务中的代码抛出特别,J17、VM进程会在退出之前向服进程tasktracker进程发送错误报告,tasktracker会将此(任务尝试)taskattempt标记为failed状态,释放一个槽以便运行另外一个任务U(2)jvm失败。JVM突然退出,即JVM错误,这时tasktracker会留意到进程已经退出,标记为failed另外:n1.任务失败有重试机制,重试次数map任务设置是mapred.map.max.attempts属性掌握,reduce是mapred.reduce.ma.attempts属性掌握。n2.一些job以任务完成总体的一部分就能够接受,这个百分比由mapred.map.fa