1.首先是map获取分片,分片的大小和分片规则取决于文件输入的格式,FileInputFormat是输入格式的一个基类,FileInputFormat下有几个重要的子类,分别是TextInputFormat,KeyValueTextInputFormat,NLineInputFormat等等,使用什么输入格式决定分片的分片大小和规则,以及map的处理方式。map处理完后有必要就进行分区,分区是为了在不同的reduce处理数据,有负载均衡的作用,使用几个reduce取决于Hadoop集群的性能。默认的分区方式是对key的hash值与reduce个数进行取模,reduce默认数为1个,分区之后就是分组,默认的分组也是根据key进行分组,当需要在分区的基础上继续进行细分的话,就可以使用分组,同一个分组的数据同时进入一个reduce,分组之后就是排序,排序是在分组的组里进行排序的,默认的排序规则也是根据key进行排序的。之后就是combiner,combiner必须在所有map执行完才能执行,Combiner作用是合并相同的key对应的value,combiner的作用1是减少map写入到磁盘的文件大小(磁盘io),作用2是减少reduce和map节点之间的io输出量(网络io)。combiner一般是直接使用reduce的方法。
reduce阶段:reduce会根据分区去相应的节点复制数据,在进行排序之后进入reduce进行处理,之后数据输出。