图片对步骤没有进行更精确的划分。
第一步:InputFormat
InputFormat 在 HDFS文件系统中读取要进行计算的数据。
输出给Split
第二步:Split
Split将数据进行逻辑切分,切分成多个任务。
输出给RR(RecordReader)
第三步:RR(RecordReader)
RR将切分后的数据转换成key value进行输出
key:每一行行首字母的偏移量
value:每一行数据
输出给Map
第四步: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)
第九步:reduce
reduce:根据业务需求对传入的数据进行汇总计算。
输出给shuffle
第十步:outputFormat
outputFormat:将最终的结果写入HDFS