一. 简介
MapReduce计算框架是Google提出的一种并行计算框架,是Google云计算模型MapReduce的java开源实现,用于大规模数据集(通常1TB级以上)的并行计算。但其实,MR不仅是一种分布式的运算技术,也是简化的分布式编程模式,是用于解决问题的程序开发模型。
二.MapReduce基本编程模型和框架
- 一种分布式计算模型,解决海量数据的计算问题
- MapReduce 将整个并行计算过程抽象到两个函数
- Map: 对一些独立元素组成的列表的每一个元素进行指定的操作可以高度的并行
- Reduce : 对一个列表的元素进行合并
- 一个简单的MapReduce 程序只需要指定Map(),Reduce(),Input ,outPut 剩下的事情由框架完成
- Mapreduce 将作业整个运行过程分为下面两个阶段
- map 阶段由一定数量的Task 组成 包括 :
1. 输入阶段格式解析:InputFormat
2. 输入数据处理:Mapper
3. 数据分组:Partitioner - Reduce 阶段由一定数量的ReduceTask 组成:
1. 数据远程拷贝
2. 数据按照Key 排序
3. 数据处理Reducer
4. 数据输出格式OutputFormat
- map 阶段由一定数量的Task 组成 包括 :
抽象模型图如下所示:
三. Hadoop的MapReduce的并行编程模型
Hadoop的MapReduce先将数据划分为多个key/value键值对。然后输入Map框架来得到新的key/value对,这时候只是中间结果,这个时候的value值是个集合。再通过同步屏障(为了等待所有的Map处理完),这个阶段会把相同key的值收集整理(Aggregation&Shuffle)在一起,再交给Reduce框架做输出组合,如图2中每个Map输出的结果,有K1,K2,K3,通过同步屏障后,K2收集到一起,K2收集到一起,K3收集到一起,再分别交给Reduce,通过Reduce组合结果。
下面给出一个图解方便更好的理解
四. Hadoop的MapReduce的完整编程模和框架
Combiner
Combiner可以理解为一个小的Reduce,就是把每个Map结果,先做一次整合。例如图3中第三列的Map结果中有2个good,通过Combiner之后,先将本地的2个goods组合到了一起(红色的(good,2))。好处是大大减少需要传输的中间结果数量,达到网络数据传输优化,这也是Combiner的主要作用。
Partitioner
为了保证所有的主键相同的key值对能传输给同一个Reduce节点,如图3中所有的good传给第一个Reduce前,所有的is和has传给第二个Reduce前,所有的weather,the和today传到第三个Reduce前。MapReduce专门提供了一个Partitioner类来完成这个工作,主要目的就是消除数据传入的Reduce节点后带来不必要的相关性。
参考 :https://www.cnblogs.com/boothsun/p/7714627.html