Task运行过程分析.docMap Task:read,map,collect,spill,combine
Reduce 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并发从Map
Task端拷贝数据,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接口,并且以线
Task运行过程分析 来自淘豆网www.taodocs.com转载请标明出处.