MapReduce模型及其应用

MapReduce是一种编程模型,它与Hadoop分布式文件系统(HDFS)结合使用,可以处理大数据问题。在之前的中,讨论了Hadoop的基础知识。MapReduce的基本数据单位是(key, value)对,所有类型的结构化和非结构化数据都需要转换为这种基本单位,然后才能输入到MapReduce模型中。顾名思义,MapReduce模型由两个独立的程序组成,即映射函数和归约函数。本文将帮助逐步理解MapReduce模型的功能。

MapReduce模型的三个阶段

MapReduce模型的计算分为三个阶段:

  1. 映射阶段
  2. 洗牌阶段
  3. 归约阶段

从语义上讲,映射和洗牌阶段负责数据的分布,而归约阶段执行计算。本文将详细讨论这三个阶段。

映射阶段

MapReduce逻辑与其他数据框架不同,它不仅适用于结构化数据集,还具有处理非结构化数据的强大能力。映射阶段是实现这一点的关键步骤。映射器为非结构化数据带来结构。例如,如果想通过照片拍摄地点(城市)来计算笔记本电脑上的照片数量,需要分析非结构化数据。映射器从这个数据集中创建(key, value)对。在这种情况下,键将是位置,值将是照片。映射器完成任务后,对整个数据集有了结构。

在映射阶段,映射器接收单个(key, value)对作为输入,并产生任意数量的(key, value)对作为输出。重要的是要将映射操作视为无状态的,即其逻辑一次只处理一对(即使在实践中,几个输入对被交付给同一个映射器)。总结来说,在映射阶段,用户只需设计一个映射函数,将输入(key, value)对映射到任意数量(甚至没有)的输出对。大多数情况下,映射阶段仅用于通过更改其键来指定输入值的期望位置。

洗牌阶段

洗牌阶段由MapReduce框架自动处理,即工程师无需参与此阶段。实现MapReduce的底层系统将所有与单个键关联的值路由到同一个归约器。

归约阶段

在归约阶段,归约器接收与单个键k关联的所有值,并输出任意数量的(key, value)对。这突出了MapReduce计算的一个顺序方面:所有映射都需要完成之后,归约阶段才能开始。由于归约器可以访问所有具有相同键的值,因此它可以对这些值执行顺序计算。在归约步骤中,通过观察操作不同键的归约器可以同时执行,从而利用了并行性。总结来说,在归约阶段,用户设计一个函数,该函数接收与单个键关联的值列表作为输入,并输出任意数量的对。通常,归约器的输出键等于输入键(实际上,在原始的MapReduce论文中,输出键必须等于输入键,但Hadoop放宽了这一限制)。

总体而言,MapReduce范式中的程序可以由多个轮次(通常称为作业)的不同的映射和归约函数组成,这些函数依次执行。

让通过一个例子来深入理解Map-Reduce。有以下3个句子:

1. The quick brown fox 2. The fox ate the mouse 3. How now brown cow

目标是计算每个句子中每个词的频率。想象一下,这些句子每个都占用了巨大的内存,因此被分配到不同的数据节点。映射器接管这些非结构化数据并创建键值对。在这种情况下,键是词,值是这个词在该数据节点上的文本中的计数。例如,第一个映射节点生成4个键值对:(the,1), (brown,1), (fox,1), (quick,1)。前3个键值对进入第一个归约器,最后一个键值对进入第二个归约器。

类似地,第二和第三个映射函数为其他两个句子执行映射。通过洗牌,所有相似的词都汇聚到同一个终点。一旦键值对排序完成,归约器函数就对这些结构化数据进行操作,以得出摘要。

让来看一些Map-Reduce函数在行业中的使用示例:

  • 在Google:
    • Google搜索的索引构建
    • Google新闻的文章聚类
    • 统计机器翻译
  • 在Yahoo!:
    • Yahoo!搜索的索引构建
    • Yahoo!邮件的垃圾邮件检测
  • 在Amazon:
    • 产品聚类
    • 统计机器翻译

使用Map-reduce函数的约束是用户必须遵循逻辑格式。这种逻辑是使用映射函数生成键值对,然后使用归约函数进行总结。但幸运的是,大多数数据操作都可以适应这种格式。在下一篇文章中,将讨论如何使用Map-Reduce进行数据集合并、矩阵乘法、矩阵转置等示例。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485