MapReduce_V1总结

来源:互联网 发布:pano.js 编辑:程序博客网 时间:2024/06/03 07:19

1,执行过程。

1.1,Map/Reduce Task任务分配。根据输入文件,基本上每个文件Block对应一个MapTask(也可能多对一),而Reduce Task则较少;

1.2,Map Task 执行map函数。执行map函数得到Key/Value对;

1.3,Partition过程。map函数输出的Key/Value要分配到Reduce Task,默认对Key/Value进行Hash之后随机分配,也可以继承自定义实现,并提供给Job。Partition的结果缓存在一个默认100M的空间内;

1.4,Spill过程。当100M缓存空间利用率溢出80%的时候,后台线程启动将缓存空间内存写入到local file中。写入前,对序列化后的Key/Value执行Sort和Combine操作。Combine在Map Task执行,一般就是Reduce函数,要求输入/输出的Key/Value类型一致。

1.5,Merge过程。Spill过程一次溢出产生一个local file,当发生多次溢出的时候,会产生多个local file,需要对多个local file合并生成一个local file。该过程也会执行Combine函数。

---------------------------------------------以上为Map Task控制执行的过程---------------------------------------

1.6,Copy过程。从TaskTracker节点将Map Task阶段生成的最终local file拷贝到Reduce Task的local file。

1.7,Merge过程。拷贝过程后,执行Sort|Merge操作。

1.8,Reduce过程。执行Reduce函数,生成最后的结果HDFS文件。

注:一般Combine函数和Reduce函数是同一个,另外在调用Reduce函数前,有一个默认的排序操作。Sort|Reduce函数在Map Task中的Spill过程和Merge过程,Reduce Task阶段的Merge过程和Reduce过程都有执行。

2,适用范围。

适用于对大规模数据的顺序独立计算,要求计算模型中输入块之间是可分解的,独立的。不适用于迭代式计算。

ChainMapper|ChainReduce可以将多个Map|Reduce过程串接起来,类似于[Mapper]+|[Reducer]+|[Mapper]+的链式结构。

 

 

原创粉丝点击