MapReduce的概念
MapReduce一种分布式计算框架,是hadoop的两大核心组件之一。分布式文件系统HDFS解决了大数据存储问题,MapReduce解决了大数据的计算问题,两者缺一不可,共同构成了hadoop体系的基础。
MapReduce编程模型
MapReduce采用"分而治之"的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然后通过整合各个节点的中间结果,得到最终结果。简单地说,MapReduce就是"任务的分解与结果的汇总"。
在Hadoop中,用于执行MapReduce任务的机器角色有两个:一个是JobTracker;另一个是TaskTracker,JobTracker是用于调度工作的,TaskTracker是用于执行工作的。一个Hadoop集群中只有一台JobTracker。
在分布式计算中,MapReduce框架负责处理了并行编程中分布式存储、工作调度、负载均衡、容错均衡、容错处理以及网络通信等复杂问题,把处理过程高度抽象为两个函数:map和reduce,map负责把任务分解成多个任务,reduce负责把分解后多任务处理的结果汇总起来。
需要注意的是,用MapReduce来处理的数据集(或任务)必须具备这样的特点:待处理的数据集可以分解成许多小的数据集,而且每一个小数据集都可以完全并行地进行处理。
MapReduce原理图
下图为简单的MapReduce原理示意图,是一个经典的单次计数案例。几个主要的阶段中,只有Mapping和Reducing阶段是需要自定义,其它阶段是有MapReduce框架自动完成。
- Splitting阶段将文档按行拆分
- Mapping阶段对每行应用一个map函数,将每行文本映射成键值对,用户需要定义的就是map函数
- Shuffing阶段将Mapping阶段的输出进行整理,相同键放在一起(具体的过程远比这里介绍的复杂,这里只是简单说明)
- Reducing阶段合并相同的键值对,产生最终输出,用户需要定义reduce函数。