《-大数据技术课件第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另外:n
17、1.任务失败有重试机制,重试次数map任务设置是mapred.map.max.attempts属性掌握,reduce是mapred.reduce.ma.attempts属性掌握。n2.一些job以任务完成总体的一部分就能够接受,这个百分比由mapred.map.failures.18、precent和mapred.reduce.failures.precent参数掌握。215.1MapReduce简介n(3)任务尝试(taskattempt)是可以中止(killed)的。225.1MaPRedUCe简介2.tasktracker失败U作业运行期间,tasktracker会通过心跳机制不断与系统
18、jobtracker通信,假如某个tasktracker运行缓慢或者失败,消失故障。tasktracker就会停止或者很少想jobtracker发送心跳,jobtracker会留意到此tasktracker发送心跳的状况,从而将此tasktracker从等待任务调度的taskt19、racker池中移除,n1)假如是map并且胜利完成的话JobtraCker会支配此tasktracker上一胜利运行的map任务返回n2)假如是reduce并且胜利的话,数据直接使用,由于reduce只要执行完了的就会把输出写到Hdfs上n3)假如他们属于未完成的作业的话,reduce阶段无法猎取改tasktra
19、cker上的本地map输出文件,任何任务都需要重新调度n另外,即使tasktracker没有失败,假如它上面的失败任务远远高于集群的平均失败任务数,也会被列入黑名单。可以通过重启从jobtracker的黑名单移除。235.1MapReduce简介3.jobtracker失20、败uJobTracker失败应当说是最严峻的一种失败方式了,而且在Hadoop中存在单点故障的状况下是相当严峻的,由于在这种状况下作业最终失败,尽管这种故障的概率微小。将来版本可以通过启动多个JobTraCker,在这种状况只运行一个主的JobTrackerz通过一种机制来确定哪个是主的JobTracker.245.1M
20、apReduce简介提纲o5.1MapReduce简介o5.2MapReduce操作实践o小结o习题255.2MapReduce操作实践o5.2.1MapReduceWOrdCOUnt编程实例I词频统计是最简洁也是最能体现MapReduce思想的程21、序之一,可以称为MapReduce版“HelloWoHc,该程序的完整代码可以在Hadoop安装包的src/examples名目下找到。词频统计主要完成的功能是:统计一系列文本文件中每个单词消失的次数。本节通过分析源代码关心读者摸清MapReduce程序的基本结构。26MaPRedUCeMaPRedUCe架构图架构图ILWordCount代码分
21、析MaPRedUCe框架自带的示例程序WordCount只包含Mapper类和Reduce类,其他的全部使用默认类,下面为WordCount源码分析。Ul)Mapper类Map过程需要继承org.apache.hadoop.mapre22、duce包中的MaPPer类,并重写map方法。u2)Reduce类U3)主函数U4)提交WordCountI2.打包运行U在EdiPSe中选择FileEXPOrt选项,导出jar包。u(2)新建两个文本文件并上传到HDFSu运行jar包U查看运行结果注:详细实现过程及代码请参见本章习题注:详细实现过程及代码请参见本章习题44答案答案275.2MapRedu
22、ce操作实践o5.2.2MapReduce倒排索引编程实例I1.简介倒排索引是文档检索系统中最常用的数据结构,被广泛地应用于全文搜寻引擎。它主要用来存储某个单词(或词组)在一个文档或一23、组文档中的存储位置的映射,即供应了一种依据内容来查找文档的方式。由于不是依据文档来确定文档所包含的内容,而是进行了相反的操作,因而称为倒排索引(invertedinde)o通常状况下,倒排索引由一个单词(或词组)及相关的文档列表组成,文档列表中的文档或标识文档的ID号,或者指定文档所在位置的URL这里将单词和URl组成key值,将词频作为VaIUe,这样做的好处是可以利用MaPRedUCe框架自带的MaP端
23、排序,将同一个文档的相同单词的词频组成列表,传递给COmbine过程,实现类似于WordCount的功能。285.2MapReduce操作实践I2.分析与设计本节实现的24、倒排索引主要关注的信息为:单词、文档URI及词频。下面根据MaPRedUCe的处理过程给出倒排索引的设计思路。UI)MaP过程首先使用默认的TextlnputFormat类对输入文件进行处理,得到文本中每行的偏移量及其内容。明显,Map过程首先必需分析输入的keyzvalue对,得到倒排索引中需要的3个信息:单词、文档URI和词频。这里存在两个问题:第一,key,value对只能有两个值,作为key或value值;其次,通
24、过一个RedUCe过程无法同时完成词频统计和生成文档列表,所以必需增加一个COmbine过程完成词频统计。这25、里将单词和URl组成key值,将词频作为ValUe,这样做的好处是可以利用MapReduce框架自带的Map端排序,将同一个文档的相同单词的词频组成列表,传递给Combine过程,实现类似于WordCount的功能。295.2MapReduce操作实践U2)Combine过程经过map方法处理后,Combine过程将key值相同的value值累加,得到一个单词在文档中的词频。假如单词在文档中的词频的输出作为Reduce过程的输入,在ShUffle过程时将面临一个问题:全部具有相同单
25、词的记录(由单词、URI和词频组成)应当交由同26、一个Reduce处理,但当前的key值无法保证这一点,所以必需修改key值和ValUe值。这次将单词作为key值,URI和词频组成value值。这样做的好处是可以利用MapReduce框架默认的HashPartitioner类完成Shuffle过程,将全部相同的单词发送给同一个Reduce处理。305.2MapReduce操作实践U3)Reduce过程经过上述两个过程后,Reduce过程只需要将相同key值的value值组合成倒排索引文件所需的格式即可,剩下的事情就可以直接交给MapReduce框架进行处理了。u27、4)需要解决的问题本节设
26、计的倒排索引在文件数目上没有限制,但是单个文件不宜过大(详细值与默认HDFS块大小及相关配置有关),要保证每个文件对应一个splito否则,由于Reduce过程没有进一步统计词频,最终结果可能会消失词频未统计完全的单词。因此可以通过重写InPUtfOrmat类将每一个文件作为一个SPlit,避免上述情况;或者执行两次MaPReduce,第一次用于统计词频,其次次用于生成倒排索引。除此之外,还可以利用复合键值对等实现包含更多信息的倒排索引。315.2MapReduce操作实践I3.倒排索引完整源码:略325.2MapReduce操作实践28提纲05.1MapReduce简介05.2MapReduce操作实践o习题o小结33习题I1.简述MapReduce架构。I2.简述MapReduce的工作原理。I3.简述MapReduce的工作机制。I4.编写MapReduceWordCountoI5.实现MapReduce倒排索引编程。注:答案请参见习题答案34提纲。5.1MaPRedUCe简介o5.2MaPRedUCe操作实践o习题o小结35小结本章首先阐述了MaPRedUC架构;然后介绍了MaPRedUCe的工作原理和MapReduce的工作机制;最终重点介绍了基于MapReduce架构的WordCount编程实例和倒排索引编程实例。36