初识Mapreduce
Mapreduce介绍
核心:分而治之。
Map负责分,把复杂的任务分解为若干个简单任务来并行处理。
Reduce负责合,对map阶段的结果进行汇总。Mapmask:线程
可以有多个reduce,不同reduce有不同的任务。
Mapreduce设计构思
MapReduce有两个部分,一个是自带的计算框架,一个是自己写的业务逻辑代码。如何结合两个部分?提供了统一的计算接口,只需要在应用层进行具体的计算,剩下的交给框架来处理。定义了Map和Reduce两个抽象的编程接口口,用户去编程实现.Map和Reduce,Mapreduce处理的数据类型是**<key,value>键值对**。数据流在走的时候,其实就是键值对的转换,把一个键值对转换成另一个键值对。
Map(k1;v1)->(k2;v2) 类似于数组遍历
Reduce(k2;v2)->(k3,v3)
MapReduce编程规范
Mapreduce的编程流程分为8步,其中Map阶段2步,shuffle阶段4步,Reduce阶段2步。
Map阶段的2步
1.设置InputFormat类(可以决定我们对源文件的一种读取方式)是一个抽象类,我们用他的子类:TextInputFormat类 {一行一行读,每读取一行会变成一个key-value对}我们要使用,把数据切分为k1,v1(k1表示这一行开头的偏移量,v1表示这一行的数据)键值对,输入到第二步
2.自定义Map逻辑(继承Mapper类{重写map方法}),把第一步结果转换为另外的k2,v2,输出结果
Shuffle阶段的4步
3.对输出的key-value进行分区(做标记)
4.对不同分区对的数据按照相同的key(k2)排序
5.(可选)对分组过的数据初步规约(降低数据的网络拷贝,减少网络数据的传输量)
6.对数据进行分组,相同key的value放入一个集合。
Reduce阶段的2步
7.对多个map阶段的结果进行排序及合并,编写Reduce函数实现自己的逻辑(要继承一Reducer类{重写reduce方法})—>对输入的Key-Value进行处理,转为新的Key-value(k3,v3)输出
8.设置OutputFormat(抽象类,使用子类TextOutputformat,数据会写到txt文件里)处理并保存Reduce输出的Key-Value数据