一、Map阶段流程
1.Read阶段
这个阶段主要是客户端读取待处理数据的阶段。
- 客户端获取待处理数据
- 客户端submit之前,根据数据信息,形成一个任务分配的规则(分片信息)
- FileInputFormat
- CombineFileInputFormat
提交切片信息给集群(resource manager)
RM根据切片信息启动一个appmaster,并分配map task给节点(node manager)
分配了map task的节点执行
将kv的处理结果写出到一个环形缓冲区
- 默认100M
- 左侧数据,右侧索引
- 写到80%后,将数据写入磁盘,并反向回写
- 不断重复
- 根据分区方式和分区数量进行分区
- HashPartition
- 自定义Partition
- 1分区
- 多分区
分区内部排序
app master根据分区的数量启动相应数量的reduce task
-
2.Merge阶段-合并文件
3.Sort阶段-归并排序
排序实际上与合并同时进行,通过归并排序的方式执行,实现分区内有序。
这个阶段还可以进行GroupingComparator分组,将key不同或不完全相同的记录划分为一组传递至ReduceTask执行4.Reduce阶段
一次读取一个分组的数据
- 仅按照key分组
- 通过GroupingComparator分组
- 业务逻辑
- 写入输出文件
- 默认TextOutputFormat