大数据中 MapReduce 的介绍指南
已发表: 2022-09-21MapReduce 提供了一种有效、更快且具有成本效益的应用程序创建方式。
该模型利用并行处理、数据局部性等先进概念,为程序员和组织提供了很多好处。
但是市场上有太多的编程模型和框架可供选择,以至于很难选择。
当谈到大数据时,你不能随便选择任何东西。 您必须选择可以处理大量数据的技术。
MapReduce 是一个很好的解决方案。
在本文中,我将讨论 MapReduce 的真正含义以及它如何带来好处。
开始吧!
什么是 MapReduce?
MapReduce 是 Apache Hadoop 框架内的一个编程模型或软件框架。 它用于创建能够在具有容错性和可靠性的数千个节点(称为集群或网格)上并行处理大量数据的应用程序。
这种数据处理发生在存储数据的数据库或文件系统上。 MapReduce 可以与 Hadoop 文件系统 (HDFS) 一起使用来访问和管理大量数据。
该框架由 Google 于 2004 年推出,并由 Apache Hadoop 推广。 它是 Hadoop 中的处理层或引擎,运行以不同语言(包括 Java、C++、Python 和 Ruby)开发的 MapReduce 程序。
云计算中的 MapReduce 程序是并行运行的,因此适合进行大规模的数据分析。

MapReduce 旨在使用“map”和“reduce”函数将任务拆分为更小的多个任务。 它将映射每个任务,然后将其减少为几个等效的任务,从而降低集群网络的处理能力和开销。
示例:假设您正在为一屋子的客人准备一顿饭。 因此,如果您尝试准备所有菜肴并自己完成所有过程,那将变得忙碌且耗时。
但是假设您让您的一些朋友或同事(不是客人)通过将不同的流程分配给可以同时执行任务的另一个人来帮助您准备餐点。 在这种情况下,当您的客人还在家里时,您将更快、更轻松地准备餐点。
MapReduce 以类似的方式与分布式任务和并行处理一起工作,以更快、更轻松地完成给定任务。
Apache Hadoop 允许程序员利用 MapReduce 在大型分布式数据集上执行模型,并使用先进的机器学习和统计技术来查找模式、进行预测、发现相关性等。
MapReduce 的特点
MapReduce 的一些主要特性是:
- 用户界面:您将获得一个直观的用户界面,提供有关每个框架方面的合理详细信息。 它将帮助您无缝地配置、应用和调整您的任务。

- 有效负载:应用程序利用 Mapper 和 Reducer 接口来启用 map 和 reduce 功能。 Mapper 将输入键值对映射到中间键值对。 Reducer 用于减少与其他较小值共享一个键的中间键值对。 它执行三个功能——排序、洗牌和归约。
- Partitioner:它控制中间映射输出键的划分。
- Reporter:这是一个报告进度、更新计数器和设置状态消息的功能。
- Counters:它表示 MapReduce 应用程序定义的全局计数器。
- OutputCollector:此函数从 Mapper 或 Reducer 收集输出数据,而不是从中间输出。
- RecordWriter:将数据输出或键值对写入输出文件。
- DistributedCache:它有效地分发特定于应用程序的较大的只读文件。
- 数据压缩:应用程序编写者可以压缩作业输出和中间映射输出。
- 错误记录跳过:您可以在处理地图输入时跳过几条错误记录。 这个特性可以通过类——SkipBadRecords 来控制。
- 调试:您将获得运行用户定义脚本和启用调试的选项。 如果 MapReduce 中的任务失败,您可以运行调试脚本并查找问题。
MapReduce 架构

让我们通过深入了解 MapReduce 的组件来了解其架构:
- 作业: MapReduce 中的作业是 MapReduce 客户端想要执行的实际任务。 它包含几个较小的任务,这些任务结合起来形成最终任务。
- 作业历史服务器:它是一个守护进程,用于存储和保存有关应用程序或任务的所有历史数据,例如在执行作业之后或之前生成的日志。
- 客户端:客户端(程序或 API)将作业带到 MapReduce 执行或处理。 在 MapReduce 中,一个或多个客户端可以不断地将作业发送到 MapReduce Manager 进行处理。
- MapReduce Master: MapReduce Master 将作业分成几个较小的部分,确保任务同时进行。
- Job Parts:子作业或作业部分是通过划分主作业得到的。 它们被处理并最终组合以创建最终任务。
- 输入数据:它是提供给 MapReduce 用于任务处理的数据集。
- 输出数据:任务处理后得到的最终结果。
所以,在这个架构中真正发生的是客户端向 MapReduce Master 提交一个作业,它把它分成更小、相等的部分。 这使作业能够更快地处理,因为较小的任务需要更少的时间来处理而不是较大的任务。
但是,请确保任务不会被划分为太小的任务,因为如果这样做,您可能不得不面对更大的管理拆分开销并为此浪费大量时间。
接下来,作业部分可用于继续执行 Map 和 Reduce 任务。 此外,Map 和 Reduce 任务具有基于团队正在处理的用例的合适程序。 程序员开发基于逻辑的代码来满足要求。

在此之后,输入数据被馈送到 Map Task,以便 Map 可以快速生成输出作为键值对。 不是将这些数据存储在 HDFS 上,而是使用本地磁盘存储数据以消除复制的机会。
任务完成后,您可以丢弃输出。 因此,当您将输出存储在 HDFS 上时,复制将变得过大。 每个 map 任务的输出将被馈送到 reduce 任务,map 输出将提供给运行 reduce 任务的机器。
接下来,输出将被合并并传递给用户定义的reduce函数。 最后,减少的输出将存储在 HDFS 上。
此外,根据最终目标,该过程可以有多个 Map 和 Reduce 任务用于数据处理。 Map 和 Reduce 算法经过优化,可将时间或空间复杂度保持在最低水平。
由于 MapReduce 主要涉及 Map 和 Reduce 任务,因此有必要进一步了解它们。 因此,让我们讨论 MapReduce 的各个阶段,以清楚地了解这些主题。
MapReduce 的阶段
地图
在这个阶段,输入数据被映射到输出或键值对。 这里,key 可以引用地址的 id,而 value 可以是该地址的实际值。

在这个阶段只有一个但两个任务——拆分和映射。 拆分是指从主要作业中分离出来的子部分或作业部分。 这些也称为输入拆分。 因此,输入拆分可以称为映射消耗的输入块。

接下来,进行映射任务。 它被认为是执行 map-reduce 程序的第一阶段。 在这里,每个拆分中包含的数据将被传递给 map 函数以处理和生成输出。
函数 – Map() 在输入键值对的内存存储库中执行,生成中间键值对。 这个新的键值对将作为输入提供给 Reduce() 或 Reducer 函数。
减少
在映射阶段获得的中间键值对作为 Reduce 函数或 Reducer 的输入。 与映射阶段类似,涉及两个任务——shuffle 和 reduce。
因此,获得的键值对被排序和打乱以馈送到Reducer。 接下来,Reducer 根据开发者编写的 reducer 算法,根据其键值对对数据进行分组或聚合。
在这里,来自混洗阶段的值被组合以返回输出值。 这个阶段总结了整个数据集。

现在,执行 Map 和 Reduce 任务的完整过程由一些实体控制。 这些是:
- Job Tracker:简单来说,Job Tracker 就是一个负责完整执行提交的作业的 master。 作业跟踪器管理集群中的所有作业和资源。 此外,作业跟踪器会安排在特定数据节点上运行的任务跟踪器上添加的每个映射。
- 多任务跟踪器:简单来说,多任务跟踪器作为从站工作,按照 Job Tracker 的指令执行任务。 任务跟踪器分别部署在集群中执行 Map 和 Reduce 任务的每个节点上。
它之所以有效,是因为一个作业将被分成几个任务,这些任务将在集群的不同数据节点上运行。 Job Tracker 负责通过调度任务并在多个数据节点上运行来协调任务。 接下来,位于每个数据节点上的任务跟踪器执行部分作业并处理每个任务。
此外,任务跟踪器向作业跟踪器发送进度报告。 此外,Task Tracker 会定期向 Job Tracker 发送“心跳”信号,并通知他们系统状态。 如果发生任何故障,作业跟踪器能够在另一个任务跟踪器上重新安排作业。
输出阶段:当您到达此阶段时,您将拥有从 Reducer 生成的最终键值对。 您可以使用输出格式化程序来转换键值对并在记录器的帮助下将它们写入文件。
为什么使用 MapReduce?
以下是 MapReduce 的一些好处,解释了必须在大数据应用程序中使用它的原因:
并行处理

您可以将作业划分为不同的节点,每个节点同时处理 MapReduce 中该作业的一部分。 因此,将较大的任务分成较小的任务会降低复杂性。 此外,由于不同的任务在不同的机器而不是单台机器上并行运行,因此处理数据所需的时间显着减少。
数据局部性
在 MapReduce 中,您可以将处理单元移动到数据中,而不是相反。
在传统方式中,数据被带到处理单元进行处理。 然而,随着数据的快速增长,这一过程开始带来许多挑战。 其中一些是成本更高、更耗时、主节点负担、故障频繁和网络性能下降。
但是 MapReduce 通过采用相反的方法来帮助克服这些问题——将处理单元引入数据。 这样,数据就会分布在不同的节点之间,每个节点都可以处理部分存储的数据。
结果,它提供了成本效益并减少了处理时间,因为每个节点与其相应的数据部分并行工作。 此外,由于每个节点都处理部分数据,因此不会有节点负担过重。
安全

MapReduce 模型提供了更高的安全性。 它有助于保护您的应用程序免受未经授权的数据的影响,同时增强集群安全性。
可扩展性和灵活性
MapReduce 是一个高度可扩展的框架。 它允许您使用数千 TB 的数据从多台机器上运行应用程序。 它还提供了处理结构化、半结构化或非结构化以及任何格式或大小的数据的灵活性。
简单
您可以使用任何编程语言(如 Java、R、Perl、Python 等)编写 MapReduce 程序。 因此,任何人都可以轻松学习和编写程序,同时确保满足其数据处理要求。
MapReduce 的用例
- 全文索引: MapReduce 用于执行全文索引。 它的 Mapper 可以映射单个文档中的每个单词或短语。 而Reducer 用于将所有映射的元素写入索引。
- 计算 Pagerank: Google 使用 MapReduce 来计算 Pagerank。
- 日志分析: MapReduce 可以分析日志文件。 当映射器搜索访问的网页时,它可以将大型日志文件分成不同的部分或拆分。
如果在日志中发现了一个网页,一个键值对将被提供给 reducer。 这里,网页将是键,索引“1”是值。 给Reducer一个键值对后,各种网页会被聚合起来。 最终输出是每个网页的总点击数。

- Reverse Web-Link Graph:该框架还可以在 Reverse Web-Link Graph 中找到用途。 在这里, Map() 产生 URL 目标和源,并从源或网页获取输入。
接下来,Reduce() 聚合与目标 URL 关联的每个源 URL 的列表。 最后,它输出源和目标。
- 字数统计: MapReduce 用于计算一个单词在给定文档中出现的次数。
- 全球变暖:组织、政府和公司可以使用 MapReduce 解决全球变暖问题。
例如,您可能想了解由于全球变暖导致海洋温度升高的情况。 为此,您可以在全球范围内收集数以千计的数据。 数据可以是高温、低温、纬度、经度、日期、时间等。这将需要几个map和reduce任务来使用MapReduce计算输出。
- 药物试验:传统上,数据科学家和数学家共同开发一种可以对抗疾病的新药。 随着算法和 MapReduce 的传播,组织中的 IT 部门可以轻松解决只有超级计算机博士才能处理的问题。 科学家等。现在,您可以检查一种药物对一组患者的有效性。
- 其他应用程序: MapReduce 甚至可以处理在其他情况下不适合关系数据库的大规模数据。 它还使用数据科学工具,并允许在不同的分布式数据集上运行它们,这在以前只能在一台计算机上实现。
由于 MapReduce 的稳健性和简单性,它在军事、商业、科学等领域都有应用。
结论
MapReduce 可以证明是技术上的突破。 这不仅是一个更快、更简单的过程,而且具有成本效益且耗时更少。 鉴于其优势和不断增加的使用率,它可能会见证跨行业和组织的更高采用率。
您还可以探索一些学习大数据和 Hadoop 的最佳资源。