分为两步(mapper和reducer):(1)Mapper端;(2)Reducer端。((3)启动类)
核心思想:根据业务场景确定K,V。
K的作用:分区、排序、分组、聚合维度;
K、V都要实现Hadoop的序列化;
Hadoop的序列化实现方式:read、write方法
流程:
1、任务切片划分:计算逻辑–>根据文件大小等
2、根据逻辑启动maptask,maptask的个数决定map执行时的并行度
3、原始数据处理:切片,task负责自己的数据,readline读取一行,得到KV,交给Mapper的map()方法(每读一行数据执行一次)
4、map方法中,context.write(new K,new V),将数据写出到缓存数组MapOututBuffer中,缓存数组进行分区、排序
5、(1)分区:根据K.hashcode%numberReduceTask得到区号
(2)为什么分区: Mapper端输出的数据根据某种规则到达某个Reduce中,输出结果被Reduce计算。
注:同一个规则下的数据不能到达链各个Reduce中,会出现错误。
6、执行Reducer中的reduce()方法之前,进行shuffle分发。
7、执行reduce方法:
(1)从不同的maptask处理的结果中获取属于自己分区的数据;
(2)合并数据(放入集合);
(3)进行排序;
(4)分组;
(5)聚合;
(6)输出。