Map Reduce 简明教程

MapReduce - Introduction

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

What is Big Data?

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

Why MapReduce?

传统企业系统通常有一个集中式服务器来存储和处理数据。以下插图描绘了传统企业系统的示意图。传统模型显然不适合处理大量的可扩展数据,也无法容纳标准的数据库服务器。此外,集中式系统在同时处理多个文件时会造成太多瓶颈。

traditional enterprise system view

谷歌使用一种名为 MapReduce 的算法解决了这个瓶颈问题。MapReduce 将一个任务分成小部分并将其分配给多台计算机。稍后,结果收集到一处并集成形成结果数据集。

centralized system

How MapReduce Works?

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

  1. Map 任务获取一组数据并将它们转换成另一组数据,其中各个元素被分解成元组(键值对)。

  2. Reduce 任务获取 Map 的输出作为输入,并将这些数据元组(键值对)组合成更小的一组元组。

reduce 任务始终在 map 作业之后执行。

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

phases
  1. Input Phase - 在这里,我们有一个记录阅读器,它转换输入文件中每个记录,并将解析后的数据以键值对的形式发送给映射器。

  2. Map - Map 是一个用户定义的函数,它获取一系列键值对并处理其中的每一个,以生成零个或更多键值对。

  3. Intermediate Keys - 映射器生成的键值对称为中间键。

  4. Combiner - 组合器是一种局部 Reducer,它将 map 阶段中类似的数据分组到可识别的集合中。它获取映射器的中间键作为输入,并应用用户定义的代码在一个映射器的较小范围内聚合值。它不是 MapReduce 算法的主要部分;它是可选的。

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

  6. Reducer - Reducer 获取分组后的键值对数据作为输入,并对其中每一个运行一个 Reducer 函数。在这里,数据可以以多种方式聚合、筛选和组合,并且需要广泛的处理。执行完成后,它会给最后一步提供零个或更多键值对。

  7. Output Phase - 在输出阶段,我们有一个输出格式化器,它将 Reducer 函数中的最终键值对转换为最终形式,并使用记录写入器将它们写入文件。

让我们尝试借助一小部分示意图理解 Map 和 Reduce 这两个任务 −

mapreduce work

MapReduce-Example

让我们举一个实际示例来说明 MapReduce 的功能。推特每天收到大约 5 亿条推文,每秒接近 3000 条推文。以下插图展示了推特如何借助 MapReduce 管理其推文。

mapreduce example

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

  1. Tokenize − 将推文标记为标记映射,并将其写入为键值对。

  2. Filter − 从标记映射中筛选出不需要的单词,并将筛选后的映射写入为键值对。

  3. Count − 为每个单词生成标记计数器。

  4. Aggregate Counters − 将类似计数器值聚合为可管理的小单位。