第一步:inputFormat
inputFormat 在hdfs(分布式文件系统)文件系统读取要进行计算数据 输出给split
第二步:split
split把数据进行逻辑分割,切分成多个任务输出给RR(RecordReader)
第三步:RR(RecordReader)
RR将切分后的数据转换成key(键)value(值)进行输出
key:每一行行首字母的偏移量(到段首的差值)
value:每一行数据
输出给Map
第四步:Map
收到一条一条的数据(有多少行数据运行多少次,输出的次数根据业务需求而定)
Map的输出是 key value的list
输出给shuffle(partition)
---------------------------------------Map---------------------------------------------------------------
第五步:partition
partition:按照一定的规则对key value的list 进行分区
输出给Shuffle(sort)
第六步:sort
Sort:对每个分区内的分区数据进行排序(内部算法)。
输出给Shuffle(Combiner)
第七步:Combiner
Combiner:在Map端进行局部聚合(汇总)
目的是为了减少网络带宽的开销
输出给shuffle(Group)
第八步:Group
Group:将相同的key的key提取出来作为唯一的key
将相同的key对应的value提取出来 组装成一个value的List
输出给Shuffle(Reduce)
------------------------------------Shuffle--------------------------------------------
第九步:reduce
reduce:根据需求对传入的数据进行汇总计算
输出给:outpoutFormat
第十步:outputFormat
outoutFormat:将最终的结果写入HDFS
------------------------------------reduce--------------------------------------------