四、MapReduce
1. 理解MapReduce思想
针对复杂的大任务,尝试进行拆分成若干个小任务,并行处理提高效率,最终再合并结果。
先分再合、分而治之
分:针对没有依赖关系的任务,可以拆分的任务进行划分,分成小的任务。
之所以进行拆分,原因可以并行计算提高执行效率
合:对map阶段的结果进行全局汇总
2. Hadoop MapReduce设计构思
MapReduce是一个分布式运算程序的编程框架,核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在Hadoop集群上。
表现形式:有一个input和一个output
- 如何面对大数据处理:分而治之
- 抽象出两个函数式编程模型:Map和Reduce
Map负责map阶段的业务逻辑,局部并行计算的逻辑
Reduce负责reduce阶段的业务逻辑,全局汇总计算的逻辑
MapReduce中定义了如下的Map和Reduce两个抽象的编程接口,由用户去编程实现:
map: (k1;v1) -> [(k2;v2)]
reduce: (k1;[v2]) -> [(k2;v3)]
在MapReduce框架中,数据都是以<key,value>的形式存在。
- 统一架构,为用户屏蔽了底层的细节,隐藏系统层细节
用来做什么—>业务问题
具体做什么—>技术问题
程序员仅需要关心其应用层的具体计算问题,仅需编写少量的处理应用本身计算问题的程序代码。如何具体完成这个并行计算任务所相关的诸多系统层细节被隐藏起来,交给计算框架去处理:从分布代码的执行,到大到数千小到单个节点集群的自动调度使用。
3. MapReduce框架结构
一个完整的MapReduce程序在分布式运行时有三类实例进程:
- MRAppMaster:负责整个程序的过程调度及状态协调
- MapTask:负责map阶段的整个数据处理流程
- ReduceTask:负责reduce阶段的整个数据处理流程