一、map task阶段,每个task有以下三个部分组成
1.InputFormat阶段:对输入切分,并转化为key value对,传给mapper。包括text input format、sequence input format、hbase input format是hbase提供的三类input format,开发者也可以自己实现
2.mapper阶段:继承map类,用户定义的业务逻辑,把输入的key value转化为另外的key value
3.partitioner阶段:决定mapper阶段输出的每一个key value交由哪些reducer处理,默认是hash partitioner
二、reduce阶段,每个reduce task由以下四部分组成
1.将map输出的数据远程拷贝到reducer
2.把相同key的数据聚合在一起,然后交给reducer
3.reducer处理,用户实现逻辑
4.output format输出结果
map的输出首先放入内存的buffer中,当达到一定阈值的时候就会启动后台进程将数据写到本地磁盘上,写磁盘过程中要做三件事:
1.分片:partitioner决定将每个map输出的kv对分配给哪个partition进而分配给哪个reducer
2.排序:对每一个分片中的kv进行排序
3.combine:局部reducer,节省磁盘和网络io
combine结束之后就会将数据写到磁盘上,当磁盘上的文件数量达到一定阈值后,会对这些文件进行归并排序,并进行局部reducer
reduce阶段
reducer去partition上拉取对应的文件放到磁盘上,然后进行归并排序(即相同key的kv对聚合在一起)合并成大文件,将大文件交给reduce处理,然后将结果输出到output format