一、MapRaduce介绍
MapReduce是一种编程模型,具有在多节点上并行处理大数据的能力。MapReduce算法包含两个重要的事务,分别是Map和Reduce:
1、Map:把大量复杂任务分解成多个少量简单任务;
2、Reduce:将多个少量任务结果进行归类汇总。
二、Map/Reduce步骤
1、Map:负责数据的过滤分发
(1)、Splitting:从数据源(HDFS的数据块)获取数据集,随后分解成更小的子数据集
(2)、Mapping:在子数据集上进行必要的数据处理(包括spill、sort等)
注:每个map task都有一个存储map输出结果的内存缓冲区,当缓冲区快满的时候需要将缓冲区数据临时存储在磁盘上(不是HDFS),这里从内存写数据到磁盘的操作就是(溢写:spill),在map task任务结束后再对磁盘中的多个溢写数据文件整合到一个溢写文件中,然后等待分配reduce task后拉取这些输出数据。
2、Shuffle:Shuffle是MapReduce的核心
(1)、Copying:map task任务结束后,使用http请求拉取map阶段生成的输出文件。
(1)、Merging:合并Copying的所有键值对(主要是相同键值合并)
(2)、Sorting:使用健(keys)排序所有的键值对(<Key, List<Value>>)
注:Shuffle过程开始于map task数据输出,结束于reduce task数据输入,横跨Map端和Reduce端;在这个过程中,Shuffle主要任务是对Map的结果进行分区(partition)、排序(sort)和分割(spill),相当于把一组无规则的数据转换成一组具有一定规则的数据。
3、Reduce:负责数据的计算归并
这是最后一步,在这个过程中产生了最终的输出结果,并将其写到HDFS上。