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函数。
-------