MapReduce是一种计算模型,被广泛使用的开源大数据技术Hadoop中实现了这种模型。
对于Hadoop的MapReduce来说,输入和输出都是以key-value
键值对的形式体现的。在整个map到reduce的过程中,数据都是以这种形式表现。
(input) <k1, v1> -> map -> <k2, v2> -> reduce -> <k3, v3> (output)
hadoop的MapReduce在执行逻辑上分为多个组件,不同的组件解决不同的问题。
-
Mapper
Mapper映射输入的k/v到新的k/v,新的k/v是中间结果数据,类型可以与原始输入的k/v不一致,并且可以选择映射成多个新的k/v或者直接吞没输入,不输出任何数据。Map任务的数量一般由输入数据划分的数量决定, Mapper阶段的输出作为Reducer输入前被排序,如果没有Reducer阶段,输出将不会被排序。 -
Combiner
Combiner可以在Map任务输出结果后,就地介入直接对当前节点上的Map结果进行组合,在数据流入到Reduce阶段前提前缩减数据量。 -
Reducer
Reducer以Mapper阶段的输出为输入,提炼聚合出所需要的结果。在Hadoop的的MapReduce实现中,reduce操作接受的输入是key/list的形式,共享同一个key的多个数据被传递给reduce操作。
Reducer有三个主要阶段构成:
- 洗牌 (Shuffle): 从各个节点上的Mapper结果中拉取和该reducer相关的数据,Hadoop的实现是使用HTTP协议拉取数据。
- 分类 (Sort): 分类收集到的Mapper数据。该阶段和洗牌阶段在Mapper结果产生后就并行执行。
- 聚合(Reduce): 这个阶段真正执行reduce操作
与Mapper相反,Reducer阶段的输出不会被排序。
- Partitioner 分割器
Partitioner分割器把Mapper阶段的输出分隔成不同的分区,交由Reducer处理,分区数量和reducer任务的数据是一致的。
来源:CSDN
作者:穷目楼
链接:https://blog.csdn.net/skyupward/article/details/103928894