MapReduce切片机制以及maptask和reducetask并行度设置

MapReduce运行流程

1最先启动MRAppMaster,MRAppMaster根据job的描述信息,计算需要的maptask实例的数量,然后向集群申请机器,启动相应数量的maptask进程。

2 maptask启动之后,根据给定的数据切片范围进行数据处理。

A 利用指定的inputformat来获取RecordReader对象读取数据,形成KV输入。

B 将输入的kv对传递给客户定义的map方法,做逻辑运算,将map方法输出的kv对收集到缓存。

C 将缓存中的KV对按照K分区排序会溢写到磁盘文件。

3 MRAppMaster监控到所有maptask进程任务完成之后(真实情况是,某些maptask进程处理完成以后,就会开始启动reducetask去已经完成maptask处去fetch数据),会根据客户指定的参数启动相应数量的reducetask进程。并告知reducetask进程要处理的数据范围(数据分区)。

4 ReduceTask进程启动以后,根据MRAppMaster告知的待处理数据的位置,抓取maptask的输出结果文件,并在本地进行重新归并排序。按照相同key的KV为一个组,调用客户定义的reduce方法进行逻辑运算,收集输出的结果KV,调用客户指定的outputformat将结果数据输出到外部的存储。

maptask并行度决定机制

Maptask的并行度决定了map阶段的任务处理并发程度。

一个job的map阶段并行度由客户端提交的job决定。

客户端对map阶段并行度的规划逻辑为:

将待处理数据执行逻辑切片。按照一个特定切片的大小,将待处理的数据划分成逻辑上的多个split,然后每一个split分配一个maptask实例,并进行处理。

这段逻辑以及形成的切片规划描述文件,是由FileInputFormat实现类的getSplits方法来完成的。该方法返回List,每个InputSplit封装了一个逻辑切片的信息,包括长度和位置等信息。

猜你喜欢

转载自blog.csdn.net/guo20082200/article/details/82317791