MapReduce - 简介
MapReduce 是一种编程模型,用于编写可在多个节点上并行处理大数据的应用程序。MapReduce 提供分析大量复杂数据的分析功能。
什么是大数据?
大数据是无法使用传统计算技术处理的大型数据集的集合。例如,Facebook 或 Youtube 每天需要收集和管理的数据量可以归入大数据类别。然而,大数据不仅涉及规模和数量,还涉及以下一个或多个方面:速度、多样性、容量和复杂性。
为什么是 MapReduce?
传统企业系统通常有一个集中式服务器来存储和处理数据。下图描绘了传统企业系统的示意图。传统模型当然不适合处理大量可扩展数据,并且无法由标准数据库服务器容纳。此外,集中式系统在同时处理多个文件时会产生过多的瓶颈。
Google 使用一种名为 MapReduce 的算法解决了这一瓶颈问题。MapReduce 将任务划分为小部分并将它们分配给多台计算机。随后,将结果收集到一个地方并整合起来,形成结果数据集。
MapReduce 的工作原理是什么?
MapReduce 算法包含两个重要任务,即 Map 和 Reduce。
Map 任务获取一组数据并将其转换为另一组数据,其中各个元素被分解为元组(键值对)。
Reduce 任务将 Map 的输出作为输入,并将这些数据元组(键值对)组合成一组较小的元组。
Reduce 任务总是在 map 作业之后执行。
现在让我们仔细看看每个阶段,并尝试理解它们的重要性。
输入阶段 − 这里我们有一个记录读取器,它转换输入文件中的每个记录,并将解析后的数据以键值对的形式发送到映射器。
Map − Map 是一个用户定义的函数,它接受一系列键值对并处理其中的每一个以生成零个或多个键值对。
中间键 − 映射器生成的键值对称为中间键。
组合器 − 组合器是一种本地 Reducer,可将来自映射阶段的类似数据分组为可识别的集合。它将来自映射器的中间键作为输入,并应用用户定义的代码在一个映射器的小范围内聚合值。它不是主 MapReduce 算法的一部分;它是可选的。
洗牌和排序 − Reducer 任务从洗牌和排序步骤开始。它将分组的键值对下载到运行 Reducer 的本地机器上。各个键值对按键排序为更大的数据列表。数据列表将等效键分组在一起,以便可以在 Reducer 任务中轻松迭代它们的值。
Reducer − Reducer 将分组的键值对数据作为输入,并对每个数据运行 Reducer 函数。在这里,数据可以通过多种方式进行聚合、过滤和组合,并且需要进行广泛的处理。执行结束后,它会将零个或多个键值对提供给最后一步。
输出阶段 − 在输出阶段,我们有一个输出格式化程序,它可以转换来自 Reducer 函数的最终键值对,并使用记录写入器将它们写入文件。
让我们借助一个小图表尝试理解 Map 和 Reduce 这两个任务 −
MapReduce 示例
让我们举一个真实的例子来理解 MapReduce 的强大功能。 Twitter 每天接收大约 5 亿条推文,相当于每秒近 3000 条推文。下图显示了 Tweeter 如何借助 MapReduce 管理其推文。
如图所示,MapReduce 算法执行以下操作 −
Tokenize − 将推文标记为标记映射并将其写入键值对。
Filter − 从标记映射中过滤掉不需要的单词,并将过滤后的映射写入键值对。
Count −为每个单词生成一个标记计数器。
聚合计数器 − 将相似的计数器值聚合成可管理的小单元。