一、MapReduce模型
1、MapReduce是大规模数据(TB级)计算的利器,Map和Reduce是它的主要思想,来源于函数式编程语言。
2、Map负责将数据打散,Reduce负责对数据进行聚集,用户只需要实现Map和Reduce两个接口,即可完成TB级数据的计算。
3、常见的应用包括:日志分析和数据挖掘等数据分析应用。另外,还可以用于科学数据计算,如圆周率PI的计算等。
4、当我们提交一个计算作业时,MapReduce会首先把计算作业拆分成若干个Map任务,然后分配到不同的节点上去执行,每一个Map任务处理输入数据中的一部分,当Map任务完成后,它会生成一些中间文件,这些中间文件将会作为主要目标就是把前面若干个Map的输出汇总到一起并输出。
二、MapReduce执行过程
1、Mapper任务的执行过程
- 每个Mapper任务是一个java进程,它会读取HDFS中的文件,解析成很多的键值对,经过我们map方法处理后,转换为很多的键值对再输出。
- 把Mapper任务的运行过程分为六个阶段
-第一阶段是把输入文件按照一定的标准分片(InputSplit),每个输入片的大小事固定的;
-第二阶段是对输入片中的记录按照一定的规则解析成键值对;
-第三阶段是调用Mapper类中的map方法;
-第四阶段是按照一定的规则对第三阶段输出的键值对进行分区;
-第五阶段是对每个分区中的键值对进行排序;
-第六阶段是对数据进行归纳处理,也就是Reduce处理。键相等的键值对会调用一次reduce方法。
2、Reduce任务的执行过程
- 每个Reduce任务是一个java进程,Reduce任务接收Mapper任务的输出,规约处理后写入到HDFS中。
- Reduce执行过程分为三个阶段
-第一阶段是Reduce任务会主动从Mapper任务复制其输出的键值对。Mapper任务可能会有很多,因此Reduce会复制多个Mapper的输出;
-第二阶段是把复制到Reduce本地数据,全部进行合并,即吧分散的数据合并成一个大的数据。再对合并后的数据排序;
-第三阶段是对排序后的键值对调用reduce方法,键相等的键值对调用一次reduce方法,每次调用会产生零个或者多个键值对,最后把这些输出的键值对写入到HDFS文件中。