MapReduce - 简介



MapReduce 是一种编程模型,用于编写可以在多个节点上并行处理大数据的应用程序。MapReduce 提供了分析海量复杂数据的能力。

什么是大数据?

大数据是指无法使用传统计算技术处理的大型数据集的集合。例如,Facebook 或 Youtube 每天需要收集和管理的数据量就属于大数据范畴。然而,大数据不仅仅是规模和体积,它还涉及以下一个或多个方面:速度、多样性、体积和复杂性。

为什么要使用 MapReduce?

传统的企业系统通常使用集中式服务器来存储和处理数据。下图描述了传统企业系统的示意图。传统模型显然不适合处理海量可扩展的数据,并且无法由标准数据库服务器容纳。此外,集中式系统在同时处理多个文件时会造成严重的瓶颈。

Traditional Enterprise System View

Google 使用名为 MapReduce 的算法解决了这个瓶颈问题。MapReduce 将任务划分为小的部分,并将它们分配给许多计算机。之后,结果将收集到一个地方并集成以形成结果数据集。

Centralized System

MapReduce 如何工作?

MapReduce 算法包含两个重要的任务,即 Map 和 Reduce。

  • Map 任务接收一组数据并将其转换为另一组数据,其中各个元素被分解成元组(键值对)。

  • Reduce 任务接收 Map 的输出作为输入,并将这些数据元组(键值对)组合成更小的元组集。

Reduce 任务总是在 Map 作业之后执行。

现在让我们仔细看看每个阶段,并尝试理解它们的意义。

Phases
  • 输入阶段 - 在这里,我们有一个 Record Reader,它转换输入文件中的每个记录,并将解析后的数据以键值对的形式发送到 Mapper。

  • Map - Map 是一个用户定义的函数,它接收一系列键值对,并处理每个键值对以生成零个或多个键值对。

  • 中间键 - Mapper 生成的键值对称为中间键。

  • 组合器 - 组合器是一种本地 Reducer,它将 Map 阶段中的相似数据分组到可识别的集合中。它接收来自 Mapper 的中间键作为输入,并应用用户定义的代码来在一个 Mapper 的小范围内聚合值。它不是 MapReduce 算法的主要部分;它是可选的。

  • 混洗和排序 - Reducer 任务从混洗和排序步骤开始。它将分组的键值对下载到本地机器上,Reducer 在该机器上运行。各个键值对按键排序成更大的数据列表。数据列表将等效的键分组在一起,以便可以轻松地在 Reducer 任务中迭代它们的值。

  • Reducer - Reducer 将分组的键值对数据作为输入,并在每个键值对上运行 Reducer 函数。在这里,数据可以以多种方式进行聚合、过滤和组合,并且需要广泛的处理。执行完成后,它会向最后一步提供零个或多个键值对。

  • 输出阶段 - 在输出阶段,我们有一个输出格式化程序,它转换来自 Reducer 函数的最终键值对,并使用记录写入器将它们写入文件。

让我们尝试借助一个小图表来理解 Map 和 Reduce 这两个任务:

MapReduce Work

MapReduce 示例

让我们以一个现实世界的例子来理解 MapReduce 的强大功能。Twitter 每天接收大约 5 亿条推文,大约每秒 3000 条推文。下图显示了 Tweeter 如何借助 MapReduce 来管理其推文。

MapReduce Example

如下图所示,MapReduce 算法执行以下操作:

  • 标记化 - 将推文标记化为标记映射,并将它们写为键值对。

  • 过滤 - 从标记映射中过滤不需要的词,并将过滤后的映射写为键值对。

  • 计数 - 为每个词生成一个标记计数器。

  • 聚合计数器 - 将类似的计数器值聚合为小的易于管理的单元。

广告
© . All rights reserved.