MapReduce介绍

MapReduce是hadoop的一种分布式计算框架,用于大规模的并行计算。
MapReduce的工作阶段可以分为Map阶段Reduce阶段,这也是MapReduce名字的由来,每一个阶段都是以键值对(key/value)作为输入和输出。
在实际编程中,底层的东西框架已经帮我们写好了,我们只要定义Map和Reduce任务,实现几个接口就好了。


MapReduce的运行机制

初步认识MapReduce
如上图所示,MapReduce的运行过程按照时间顺序可以分为:
inputmapshufflereduceoutputinput\longrightarrow map\longrightarrow shuffle\longrightarrow reduce\longrightarrow output

input

在进行Map运算前,MapReduce会根据输入文件计算输入分片(input split),每个输入分片对应一个map任务。

input split 和 blocks
输入分片存储的并非数据本身,而是一个分片的长度和记录数据位置的数组。前面HDFS的博客,我们谈到了数据块(blocks)的概念,实际上分片的数量跟数据块的数量是有联系的。
假设我们使用的是hadoop 2.x以后的版本,每个数据块的大小为128MB。我们在输入两个大小分别为100MB和200MB的文件时,MapReduce会把100MB的文件分进一个输入分片,而200MB的文件需要两个输入分片,然后我们将会有3个Map任务将被执行,而且每个Map执行的数据大小不均,这也是MapReduce优化计算的一个关键点。

map

map的本质是分割,将分割好的数据通过我们定义的映射函数来产生输出。
后面我们将会举一个具体的例子来说明:统计出现的每个单词的数量。

shuffle

shufflle的过程是maphereduce的中间过程,主要实现3大功能:分区、分组和排序。

  • 分区:决定当前的key应该交给哪个reduce任务来进行处理,相同的key必须由同一reduce任务来处理。默认情况下,根据key的hash值,对reduce个数取余,来决定哪个reduce任务处理。
  • 分组:将相同的key的value进行合并。
  • 排序:按照key的字典顺序进行排序。

reduce

reduce的本质是聚合,和map是对应关系。经过合并后的键值对,按照我们定义的逻辑关系,生产另一系列的键值对。

output

将reduce输出的键值对储存在HDFS上。


WordCount实例

初步认识MapReduce

结合一个实例来解释MapReduce的工作过程:

  • Input:输入一个文档,文档每一行有很多不同的单词;
  • split:按每一行分割文档的过程;
  • Map:切分出单词和单词的频数,以键值对的形式存在;
  • Shuffle:按key将相同的单词聚集到一起;
  • Reduce:将键值对进行合并;
  • ouput:完成整个WordCount的过程。

参考资料

hadoop 学习笔记:mapreduce框架

相关文章:

  • 2021-06-17
  • 2021-11-24
  • 2021-07-01
  • 2021-10-05
  • 2021-12-02
  • 2021-10-19
  • 2021-10-06
猜你喜欢
  • 2021-05-27
  • 2021-10-21
  • 2021-06-27
  • 2021-05-03
  • 2021-09-03
  • 2021-07-31
  • 2021-05-31
相关资源
相似解决方案