Mapreduce的编程流程主要分八个阶段:两个MAP阶段,四个shuffle阶段,两个reduce阶段。
Map两个阶段:
1:设置inputformat类,将数据分为key-value对(k1 v1),并将其输入到第二步。
2:自定义Map逻辑将第一步的结果转换为另外的键值对(k2,v2),并输出。
shuffle四个阶段:
3:对输出的键值对进行分区。
4:对不同分区的数据按照相同的key排序。
5:(可选),对分组后的数据进行初步规约,降低数据的网络拷贝。
6:对数据进行分组,将相同key的value放入同一个集合中。
Reduce两个阶段:
7:对多个Map任务的结果进行排序以及合并,编写Reduce函数实现自己的逻辑,对输入的键对值进行处理,转换为新的键对值(k3 v3),输出。
8:设置outputformat类处理并保存Reduce输出的键值对。
图解:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pbJTboOf-1603113436059)(https://s1.ax1x.com/2020/09/29/0eqy8g.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K0BpE1tg-1603113436066)(https://s1.ax1x.com/2020/09/29/0eq4aV.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UlWoI5sv-1603113436069)(https://s1.ax1x.com/2020/09/29/0eLkqI.png)]
Mapreduce wordcount案例编程流程
链接:https://blog.csdn.net/qq_16146103/article/details/105692080
重写Mapper类:
package org.example.wordcount;
import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
public class WcMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
Text k = new Text();
IntWritable v = new<