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