MapReduce 介绍

1.什么是MapReduce?

MapReduce是Hadoop的数据及逻辑处理层。?MapReduce编程模型用于并行处理大量数据,将工作划分为一组独立的任务。您需要以MapReduce的工作方式来放置及构件业务逻辑。

MapReduce编程模型类似于函数编程结构。在MapReduce中,我们从列表中获取输入,并将其转换为输出,输出同样是一个列表。它是Hadoop的核心。由MapRreduce的并行处理完成,因此Hadoop功能强大且高效。

Map-Reduce将工作分成小部分,每个部分可以在服务器集群上并行完成。一个问题分为大量较小的问题,每个问题都经过处理以提供输出。这些单独的输出被进一步处理以提供最终输出。

Hadoop Map-Reduce是可扩展的,也可以在多台计算机上使用。许多小型机器可用于处理大型机器无法处理的作业。

2. Apache MapReduce术语

让我们现在了解MapReduce的不同术语和概念,Map和Reduce是什么,什么是Job,Task,Task Attempt等等。

Map-Reduce是Hadoop的数据处理组件。?Map-Reduce程序将输入数据元素列表转换为输出数据元素列表。一个Map-Reduce程序将使用两个不同的列表来做这个事情:

Map

Reduce

在Map和Reduce之间,可以有Shuffle和Sort操作。

什么是MapReduce作业?

MapReduce作业,?Mapreduce Job?是跨数据集执行Mapper和Reducer。它执行2个处理层,即Mapper和?Reducer。?MapReduce作业是客户希望执行的工作。它由输入数据,MapReduce程序和配置信息组成。因此,客户端需要提交输入数据,需要编写Map Reduce程序并设置配置信息(这些信息是在配置文件中的Hadoop设置过程中提供的,同时我们还指定了程序本身的一些配置)

Map Reduce中的任务?(Map Reduce task)?是什么?

MapReduce中的一项任务是对一部分数据?(a slice)执行Mapper或Reducer。它也被称为任务进行中(TIP)。这意味着处理数据的过程(TIP)可以在mapper或reducer上进行。

什么是任务尝试?(Task Attempt)

任务尝试是尝试在节点上执行任务的特定实例。任何时候任何机器都有可能停机。例如,在任何节点关闭时处理数据的同时,框架会将任务重新安排到某个其他节点。这项任务的重新安排不能是无限的。这也有一个上限。任务尝试的默认值为4.如果任务(mapper and reducer)失败4次,则该作业将被视为失败的作业。对于高度优先的工作或大量工作,这项任务尝试的次数可以调高。

3. Map Abstraction

什么是Map / Mapper,Mapper的输入是什么,它如何处理数据,Mapper的输出是什么?

Map将键/值?(key/value)对作为输入。无论数据是结构化还是非结构化格式,框架都会将传入数据转换为键和值。

Key是对输入值的引用。

Value是要在其上运行的数据集。

Map Processing

由用户定义的函数可以根据自己的需要编写自定义业务逻辑来处理数据。

适用于输入中的每个值。

Map会生成一个新的键/值对列表:

Map的输出称为中间输出(Intermediate output)。

可以是与输入对不同的类型。

映射的输出存储在本地磁盘上以便Shuffle到Reduce节点。

4. Reduce Abstraction

Reducer的输入是什么,Reducer的工作是什么,Reducer写输出的地方是什么?

Reduce将中间键/值对作为输入并处理mapper的输出。通常,在reducer中,我们进行聚合或求和计算。

给定Reducer的输入由Map产生(中间输出)

提供用于Reducer的键/值对按键排序

Reduce Processing

用户定义的函数?-?这里用户也可以编写自定义业务逻辑并获得最终输出。

迭代器将给定键的值提供给Reduce函数。

Reduce生成键/值对的最终列表

Reduce的输出称为最终输出。

它可以是与输入对不同的类型。

Reduce的输出存储在HDFS中。

让我们?了解Map和Reduce如何一起工作。

5. Map和Reduce如何一起工作?

给mapper的输入数据通过写入mapper的用户定义函数进行处理。 所有需要的复杂业务逻辑都是在mapper级别实现的,因为?映射器并行完成大量处理,mapper的数量远多于reducer的数量。?Mapper会生成一个中间数据的输出,并将该输出作为reducer的输入。

这个中间结果然后通过在reducer写入的用户定义函数进行处理,并且生成最终输出。 通常,在reducer中,完成非常轻的处理。?最终的输出存储在HDFS中,并且照常进行数据块复制。

6.?Map Reduce?数据流

现在让我们来了解一下Hadoop MapReduce端到端数据流,如何为映射器提供输入,映射器如何处理数据,映射器如何写入数据,数据如何从映射器传输到为Reducer节点,Reducer在哪里运行,?Reduce应该进行哪种类型的运算

从Hadoop中的mapreduce工作流程图可以看出,方块是从节点的。图中有3个节点。在3个节点上的mappers运行,然后一个reducer将在任何一个从节点上运行。为了方便理解,reducer显示在不同的节点上,但它只能在mapper节点上运行。

现在来讨论Map阶段:

Mapper的输入是一次一个块。 (Split =默认为block)

映射器的输出被写入映射器运行的机器的本地磁盘。一旦mapper完成,这个中间输出就会传送到reduce节点。

Reducer是用户可以再次编写自定义业务逻辑的第二个处理阶段。因此,reducer的输出是写入HDFS的最终输出。

默认情况下,在一个节点上,根据需求,可以同时增加多个mapper,?如两个。这取决于数据节点硬件,块大小,机器配置等因素。我们不应该增加映射器数量超过一定限制,因为多个mapper?可能会降低性能。

Hadoop Mapreduce中的映射器将输出写入正在工作的机器的本地磁盘。这是临时数据。映射器的输出也称为中间输出。所有映射器都将输出写入本地磁盘。当第一个映射器完成时,数据(映射器的输出)从映射器节点行进到reducer节点。因此,从映射器节点到Reducer节点的输出移动称为shuffle。

Reducer也部署在任何一个datanode上。所有映射器的输出都发送到reducer。来自不同映射器的所有这些输出被合并以形成reducer的输入。该输入也在本地磁盘上。?Reducer是另一个可以编写自定义业务逻辑的处理器。这是处理的第二阶段。通常对于reducer我们写聚合,求和等功能类型。因此,Reducer提供了在HDFS上写入的最终输出。

Mapper和Reduce是数据处理的阶段。mappers完成处理,然后只有reducer开始处理。

尽管默认情况下在3个不同位置存在1个数据块,但框架仅允许1个映射器处理1个块。因此,只有1个映射器将处理3个副本中的1个特定块。

分区器(Partitioner)将映射器的输出分区并过滤到多个分区。?这个分区中的每一个都会进入reducer。?Hadoop使用键值原则工作,即mapper和reducer以键和值的形式获取输入,并以相同的形式写入输出。

7. MapReduce中的数据局部性

让我们来了解什么是数据局部性,它如何优化Map Reduce作业,数据局部性如何提高作业性能?

“将计算移近数据而不是移动数据到计算”。如果应用程序在其操作的数据附近执行,则应用程序所请求的计算效率会更高。当数据量非常大时尤其如此。这可以最大限度地减少网络拥塞并提高系统的吞吐量。我们的假设是,将计算移动到数据存在的位置比将数据移动到应用程序的运行位置更好。因此,HDFS为应用程序提供接口,使其更接近数据所在的位置。

由于Hadoop可以处理大量数据,无法通过网络高效传输此类数据。因此它提出了将算法移动到数据而不是数据到算法的最具创新性的原则。这被称为数据局部性?(Data Locality)。

8.?结论:Hadoop MapReduce

因此,MapReduce增强Hadoop的功能。由于它在数据局部性的概念上工作,因此提高了性能。

MapReduce 介绍

发表评论

邮箱地址不会被公开。 必填项已用*标注

五 × = 十

滚动到顶部