Task运行过程分析.docx

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Task运行过程分析

Map Task:read,map,collect,spill,combineReduce Task:shuffle,merge,sort,reduce,write-----------------------------------------------Map Task内部实现--------------------------------------------------------------------每个map处理一个输入数据的InputSplit,并将产生的若干数据片段写到本地磁盘上,Reduce Task则从每个map task上远程拷贝相应的数据片段,经分组聚集和规约后,将结果写到HDFS上作为最终结果。Map Task将中间计算结果存放在本地磁盘上,而Reduce Task通过HTTP请求各个Map Task端pull相应的数据,为了支持大量的Reduce Task并发从MapTask端拷贝数据,Hadoop采用了Jetty Server作为httpserver处理并发数据请求。Map Task执行过程:首先通过用户提供的InputFormat将对应的InputSplit解析成一系列key/value,并以此交给用户编写的map函数处理,接着按照制定的partitioner对数据分片,以确定每个key/value输入到那个Reduce Task处理,之后将数据交给用户定义的combiner进行以此本地规约,最后将结果存储在本地磁盘。Reduce Task执行过程:首先通过http请求从各个已经完成的Map Task上拷贝Reduce对于的数据片段,所有数据拷贝完之后,再以key为关键字对所有数据进行排序,通过排序,key相同的记录聚集在一起形成若干分组,然后将每组数据交给用户编写的reduce函数处理,并将最终的数据结果写到HDFS上作为最终输出结果。Hadoop内部实现了基于行压缩的数据存储格式IField,避免不必要的磁盘和网络开销。key-len,value-len,key,value排序:Map Task和Reduce Task均会对数据按照key进行排序。对于Map Task,将处理的结果暂时放在一个缓存中,当缓冲区使用率达到一定的阀值后,再对缓冲区的数据进行以此排序,并将这些有序数据以IFile的形式存储在磁盘上,当所有的数据存储完之后,它会对磁盘上所有的文件进行以此合并,以将这些文件合并成一个大的有序的文件。对于Reduce Task,从每个Map Task上远程拷贝相应的数据,如果文件大于一个阀值,则放在磁盘上,否则放在内存中。如果磁盘上的文件达到一定的阀值,则进行以此合并并生成一个较大的文件,如果内存中文件大小或者数目超过一定的阀值,则进行以此合并,并将文件写到磁盘上,当所有的数据拷贝完之后,Reduce Task对内存和磁盘上的数据进行以此合并。快速排序文件归并由类Merger完成,它要求待排序对象需要segment实例化对象,segment是对磁盘和内存中的IFile格式文件的抽象,具有迭代器的作用。可迭代读取IFile文件中的key/value记录。Reporter:所有的Task需要周期性向TaskTracker汇报最新进度和计数器值,是由Reporter组件实现的。在map/reduce Task中,TaskReporter实现了Reporter接口,并且以线程的形式启动,TaskReporter汇报的信息:任务执行进度,任务计数器的值。任务执行进度:任务执行进度信息被封装在Progress中,且每个Progress实例以树的形式存在。对于Map Task而言,它作为一个大阶段不可再分,则该阶段进度值可表示成已读取数据量占总数据量的比例。对于Reduce Task而言,分成三个阶段:shuffle,sort,reduce,每个阶段占任务的1/3,考虑到在shuffle阶段,reduce Task需从M个Map Task上读取一片数据,因此被分成M个阶段,每个阶段占shuffle进度的1/M。TaskReporter发现下面两种状态之一才会汇报:任务执行进度发生变化;任务的某个计数器值发生变化。在某个时间间隔内,如果任务执行进度和计数器均未发生变化,Task只会简单的通过RPC函数ping探测到的TaskTracker是否活着。如果在一定的时间内,某个任务执行进度和计数器均未发生变化,则TaskTracker认为其处于悬挂状态,直接将其杀掉,但是为了防止某条记录因处理时间过长而导致被杀,采用两种方法:每隔一段时间调用一次TaskPgress()函数,以告诉TaskTracker自己仍然活着;增大任务超时参数;Map Task分为四种:Job-setup Task,job-clea

文档评论(0)

138****7331 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档