MapReduce计算框架
如果将 Hadoop 比做一头大象,那么MapReduce就是那头大象的电脑。MapReduce是Hadoop核心编程模型。在Hadoop 中,数据处理核心就是 MapReduce程序设计模型。
Map 和Reduce的概念是从函数式变成语言中借来的,整个MapReduce计算过程分为Map 阶段和Reduce 阶段,也称为映射和缩减阶段,这两个独立的阶段实际上是两个独立的过程,即 Map 过程和 Reduce 过程,在 Map 中进行数据的读取和预处理,之后将预处理的结果发送到 Reduce中进行合并。
MapReduce执行流程
- 输入和拆分
不属于map和reduce的主要过程,但属于整个计算框架消耗时间的一部分,该部分会为正式的map准备数据。
- Map映射
是Hadoop并行性质发挥的地方。根据用户指定的 map过程,MapReduce尝试在数据所在机器上执行该 map程序。在HDFS中,文件数据是被复制多份的,所以计算将会选择拥有此数据的最空闲的节点。
在这一部分,map内部具体实现过程,可以由用户自定义。
- Shuffle派发
Shuffle 过程是指 Mapper 产生的直接输出结果,经过一系列的处理,成为最终的
Reducer直接输入数据为止的整个过程。这是mapreduce的核心过程。该过程可以分为两
个阶段:
Mapper 端的 Shuffle:由 Mapper 产生的结果并不会直接写入到磁盘中,而是先存
储在内存中,当内存中的数据量达到设定的阀值时,一次性写入到本地磁盘中。并同时进行
sort(排序)、combine(合并)、partition(分片)等操作。其中,sort 是把Mapper 产
生的结果按照 key 值进行排序;combine 是把key 值相同的记录进行合并;partition是把
数据均衡的分配给 Reducer。
Reducer 端的Shuffle:由于Mapper 和Reducer 往往不在同一个节点上运行,所以
Reducer 需要从多个节点上下载 Mapper 的结果数据,并对这些数据进行处理,然后才能
被Reducer 处理。
- Reduce归约(缩减、化简)
Reducer 接收形式的数据流,形成形式的输出,具体的过程可以由用户自定义,最终结果直接写入 hdfs。每个 reduce 进程会对应一个输出文件,名称以part-开头。