一个关于在大数据中使用MapReduce的简介指南

MapReduce提供了一种有效、更快、更经济的创建应用程序的方式。

这种模型利用并行处理、数据本地性等先进概念,为程序员和组织提供了许多好处。

但市场上有很多编程模型和框架可供选择,这使得选择变得困难。

而且当涉及到大数据时,你不能随便选择。你必须选择能处理大量数据的技术。

MapReduce是一个很好的解决方案。

在本文中,我将讨论MapReduce是什么以及它如何有益。

让我们开始吧!

MapReduce是什么?

MapReduce是一个编程模型或软件框架,位于 Apache Hadoop框架内。它用于创建能够在数千个节点(称为集群或网格)上并行处理海量数据的应用程序,具有容错性和可靠性。

这个data processing发生在存储数据的数据库或文件系统上。MapReduce可以与Hadoop文件系统(HDFS)一起使用,访问和管理大规模数据。

这个框架由Google于2004年推出,由Apache Hadoop推广。它是Hadoop中运行用不同语言开发的MapReduce程序的处理层或引擎,包括Java、C++、Python和Ruby。

云计算中的MapReduce程序并行运行,因此适用于大规模数据分析。

MapReduce旨在使用“map”和“reduce”函数将一个任务拆分成更小的多个任务。它将映射每个任务,然后将其减少为几个等价的任务,从而减少集群网络上的处理能力和开销。

例子:假设你要为满屋的客人准备一顿饭。所以,如果你试图自己准备所有的菜肴并做所有的工作,那将变得忙碌和耗时。

但是假设你让一些朋友或同事(不是客人)帮助你通过将不同的工作分配给另一个人来同时执行任务。在这种情况下,你将更快更容易地准备好饭菜,同时客人还在屋子里。

MapReduce以类似的方式使用分布式任务和parallel processing,以更快更容易地完成给定任务。

Apache Hadoop允许程序员利用MapReduce在大规模分布式数据集上执行模型,并使用先进的机器学习和统计技术来发现模式、进行预测、发现相关性等。

MapReduce的特点

MapReduce的一些主要特点包括:

  • 用户界面:你将获得一个直观的用户界面,提供关于每个框架方面的详细信息。它将帮助你无缝配置、应用和调整任务。
  • 负载:应用程序利用Mapper和Reducer接口来启用映射和减少功能。 Mapper将输入键值对映射到中间键值对。 Reducer用于将共享键的中间键值对减少到其他较小的值。 它执行三个功能 – 排序,洗牌和减少。
  • 分区器:它控制中间映射输出键的分割。
  • 记者:它是一种报告进度,更新计数器和设置状态消息的功能。
  • 计数器:它表示MapReduce应用程序定义的全局计数器。
  • OutputCollector:此函数从Mapper或Reducer收集输出数据,而不是中间输出。
  • RecordWriter:它将数据输出或键值对写入输出文件。
  • DistributedCache:它有效地分布较大的只读文件,这些文件是特定于应用程序的。
  • 数据压缩:应用程序编写者可以压缩作业输出和中间映射输出。
  • 错误记录跳过:在处理映射输入时,您可以跳过多个错误记录。此功能可以通过类 – SkipBadRecords来控制。
  • 调试:您将获得运行用户定义脚本和启用debugging的选项。如果MapReduce中的任务失败,您可以运行调试脚本并找到问题。

MapReduce架构

让我们通过深入了解其组件来理解MapReduce的架构:

  • 作业:在MapReduce中,作业是MapReduce客户端要执行的实际任务。它由多个较小的任务组成,这些任务组合形成最终的任务。
  • 作业历史服务器:它是一个守护进程,用于存储和保存有关应用程序或任务的所有历史数据,例如执行作业之前或之后生成的日志。
  • 客户端:客户端(程序或API)将作业带到MapReduce进行执行或处理。在MapReduce中,一个或多个客户端可以持续发送作业给MapReduce管理器进行处理。
  • MapReduce主节点:MapReduce主节点将作业分成几个较小的部分,确保任务同时进行。
  • 作业部分:通过对主要作业进行划分获得子作业或作业部分。最后,它们被处理并组合在一起以创建最终任务。
  • 输入数据:这是提供给MapReduce进行任务处理的数据集。
  • 输出数据:一旦任务处理完成,它是获得的最终结果。

因此,在这个架构中,客户端提交作业给MapReduce主节点,主节点将其分成更小的相等部分。这使得作业能够更快地进行处理,因为较小的任务所需的时间比较大的任务要少。

然而,确保任务不被划分为太小的任务,因为如果这样做,您可能会面临管理划分的较大开销,并浪费大量时间。

接下来,作业部分可用于继续进行Map和Reduce任务。此外,基于使用情况,Map和Reduce任务具有适当的程序。程序员开发基于逻辑的代码来满足要求。

然后,将输入数据提供给Map任务,以便Map可以快速生成输出作为键值对。不是将此数据存储在HDFS上,而是使用本地磁盘存储数据,以消除复制的可能性。

一旦任务完成,可以丢弃输出。因此,当将输出存储在HDFS上时,复制将变得过度。每个map任务的输出将被传递给reduce任务,并且map输出将提供给运行reduce任务的机器。

接下来,将合并输出并传递给用户定义的reduce函数。最后,减少的输出将存储在HDFS上。

此外,根据最终目标,该过程可以有多个Map和Reduce任务进行数据处理。Map和Reduce算法经过优化,使时间或空间复杂度最小。

由于MapReduce主要涉及Map和Reduce任务,因此了解更多关于它们的信息是相关的。因此,让我们讨论MapReduce的阶段,以对这些主题有一个清晰的概念。

MapReduce的阶段
Map
在此阶段,将输入数据映射为输出或键值对。在这里,键可以是地址的ID,而值可以是该地址的实际值。

这个阶段只有一个任务,即切分和映射。切分指的是从主作业划分出的子部分或作业部分。这些也被称为输入切片。因此,输入切片可以称为被映射使用的输入块。

接下来,进行映射任务。它被认为是执行映射-减少程序时的第一个阶段。在这里,每个切分中包含的数据将被传递给映射函数以进行处理和生成输出。

函数-Map()在内存存储库中对输入键值对执行,生成一个中间键值对。这个新的键值对将作为输入传递给Reduce()或Reducer函数。

减少
在映射阶段获得的中间键值对作为Reduce函数或Reducer的输入。与映射阶段类似,涉及两个任务-洗牌和减少。

因此,获得的键值对被排序和洗牌,以便传递给Reducer。接下来,根据开发人员编写的减少器算法,Reducer根据其键值对分组或聚合数据。

在这里,来自洗牌阶段的值被组合以返回一个输出值。这个阶段总结了整个数据集。

现在,执行Map和Reduce任务的完整流程由一些实体控制。它们是:
– 作业跟踪器:简单来说,作业跟踪器充当负责完整执行提交的作业的主节点。作业跟踪器管理整个集群中的所有作业和资源。此外,作业跟踪器为运行在特定数据节点上的任务跟踪器调度每个添加在任务跟踪器上的映射。
– 多个任务跟踪器:简单来说,多个任务跟踪器作为从属角色,按照作业跟踪器的指示执行任务。任务跟踪器单独部署在集群中的每个节点上,执行Map和Reduce任务。

这是因为一个作业将被分成几个在集群中的不同数据节点上运行的任务。作业跟踪器负责通过调度任务将任务分配给多个数据节点,并在每个数据节点上执行作业的一部分,并负责每个任务。

此外,任务跟踪器向作业跟踪器发送进度报告。此外,任务跟踪器周期性地向作业跟踪器发送“心跳”信号,并通知其系统状态。如果发生任何故障,作业跟踪器能够将作业重新安排到另一个任务跟踪器上执行。

输出阶段:当到达该阶段时,您将拥有从Reducer生成的最终键值对。您可以使用输出格式器将键值对转换为文件,并借助记录编写器将其写入文件。

为什么使用MapReduce?

这里是MapReduce的一些好处,解释了为什么在大数据应用中必须使用它:

并行处理

您可以将作业分成不同的节点,每个节点同时处理MapReduce中的一部分作业。因此,将较大的任务分解为较小的任务会减少复杂性。此外,由于不同的任务在不同的机器上并行运行,而不是在单个机器上运行,所以处理数据的时间显著减少。

数据本地性

在MapReduce中,您可以将处理单元移动到数据,而不是反过来。

在传统方式中,数据是为了处理而被带到处理单元。然而,随着数据的快速增长,这个过程开始带来很多挑战。其中一些挑战包括更高的成本、更耗时、负担主节点、频繁故障和网络性能降低。

但是MapReduce通过采用相反的方法-将处理单元带到数据-帮助克服了这些问题。这样,数据被分布在不同的节点之间,每个节点可以处理存储数据的一部分。

因此,它提供了成本效益,并减少了处理时间,因为每个节点都与其相应的数据部分并行工作。此外,由于每个节点处理这部分数据,没有节点会过载。

安全性

MapReduce模型提供了更高的安全性。它有助于保护您的应用程序免受未经授权的数据访问,同时增强集群的安全性。

可扩展性和灵活性

MapReduce是一个高度可扩展的框架。它允许您在多台机器上运行应用程序,使用数千TB的数据。它还提供了处理可以是结构化、半结构化或非结构化的数据的灵活性,以及任何格式或大小的数据。

简易性

您可以使用任何编程语言(如Java、R、Perl、Python等)编写MapReduce程序。因此,任何人都可以轻松学习和编写程序,同时确保满足他们的数据处理需求。

MapReduce的用例

  • 全文索引: MapReduce用于执行全文索引。其Mapper可以将单个文档中的每个单词或短语映射。Reducer用于将所有映射的元素写入索引。
  • 计算Pagerank:谷歌使用MapReduce计算Pagerank。
  • 日志分析:MapReduce可以分析日志文件。它可以将一个大型日志文件分割成各个部分或分割,而Mapper则搜索访问的网页。

如果在日志中发现了一个网页,将会向Reducer提供一个键值对。在这里,网页将是键,索引“1”是值。将键值对提供给Reducer后,各个网页将被聚合。最终输出是每个网页的总点击次数。

  • 反向网络链接图:该框架还可在反向网络链接图中使用。这里,Map()生成URL目标和源,并从源或网页输入。

接下来,Reduce()聚合与目标URL相关联的每个源URL的列表。最后,它输出源和目标。

  • 词频统计: MapReduce用于计算给定文档中单词出现的次数。
  • 全球变暖:组织、政府和公司可以使用MapReduce来解决全球变暖问题。

例如,您可能想了解由全球变暖导致的海洋温度升高的情况。为此,您可以收集全球范围内的数千个数据。这些数据可以是高温、低温、纬度、经度、日期、时间等等。这将需要使用MapReduce获取多个地图并减少计算输出所需的任务。

  • 药物试验:传统上,数据科学家和数学家共同合作制定一种可以对抗疾病的新药物。随着算法和MapReduce的传播,组织机构的IT部门可以轻松解决之前只能由超级计算机、博士科学家等处理的问题。现在,您可以检查一种药物对一组患者的有效性。
  • 其他应用:MapReduce可以处理那些无法适应关系数据库的大规模数据。它还使用数据科学工具,并允许在不同的分布式数据集上运行它们,这之前只能在一台计算机上进行。

由于MapReduce的鲁棒性和简单性,在军事、商业、科学等领域都有应用。

结论

MapReduce可以证明是技术上的突破。它不仅是一个更快、更简单的过程,而且具有成本效益和节省时间。鉴于其优势和日益增长的使用率,它很可能在各个行业和组织中得到更广泛的应用。

您还可以探索一些最佳资源learn Big Data and Hadoop

类似文章