文件->分片-> MAP开始-> 分区 -> 排序 -> 分组 -> MAP结束 -> shuffle -> (reduce端)全局排序 -> 分组 -> reduce
分区:不同数据类型分类
分组:相同k2分一组
map阶段:
RecordReader类把每个InputSplit解析成<k1,v1>
一个InputSplit对应一个map task
框架对<k2,v2>分区,不同分区由不同reduce task处理,默认一个分区
map节点可以执行reduce归约,为可选项 (Combine)
shuffle:
多个map任务输出按照不同分区网络拷贝不同reduce节点
reduce阶段:
全局合并 排序 分组
reduce方法 输入<k2,{v2...}> 输出<k3,v3>
多文件的效果
map和reduce执行流程
多文件reduce过程
多文件map过程
MapReduce执行流程
排序和分组是针对同一个分区的
多文件wordcount分析2
多文件wordcount分析
reduce阶段执行过程2
reduce阶段执行过程
map阶段执行过程3
map阶段执行过程2
map阶段执行过程
案例分析。
WordCount案例分析
多文件WordCount案列分析
多文件WordCount案列分析
3、框架调用Reduce类中的reduce方法,输入<k2,{v2...}>,输出<k3,v3>.一个<k2,{v2...}>调用一次reduce函数。
4、框架把reduce的输出保存到HDFS中
reduce阶段结束
Reduce阶段执行过程
1、框架对多个map任务的输出,按照不停的分区,通过网络copy到不同的reduce节点,这个过程称作shuffle
2、框架对reduce端收到订单相同分区的<k2,v2>数据进行合并、排序、分组。
5、在Map节点,框架可以执行reduce规约,此步骤为可选项。
6、框架会把map task输出的<k2.v2>写入到linux的磁盘文件中。
5、在Map节点,框架可以执行reduce规约,此步骤为可选项。
3、框架对map函数输出的<k2,v2>进行分区。不同分区中的<k2,v2>由不同的reduce task处理,默认只有一个分区。
4、框架对每个分区中的数据,按照k2进行排序、分组。分组,指的是相同的K2的V2分成一个组。
MapReduce之map阶段执行过程
1、框架会把输入文件(夹)划分成很多InputSplit,默认,每个HDFS的block对应一个InputSplit。通过RecordReader类把每个InputSplit解析成一个个<k1,v1>。默认每行会被解析成一个<k1,v1>
2、框架调用Mapper类中的map(...)函数,map函数的形参是<k1,v1>,输出是<k2,v2>。一个InputSplit对应一个map task
WordCount案列分析
shuffle作用:将相同分区的数据拉取到统一reduce节点进行处理
多文件处理过程2
多文件处理过程1
需要开发者实现:
Map阶段的第二步骤
Reduce阶段的第三步骤
MapReduce之Reduce阶段执行过程2