Hadoop的MapReduce

人走茶凉 提交于 2020-01-26 02:11:33

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任务的数据是一致的。
    在这里插入图片描述
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!