当Partitioner在Map Reduce中运行时?

时间:2016-10-04 05:00:35

标签: hadoop mapreduce

根据我的理解,mapper首先运行,然后是partitioner(如果有的话),然后是Reducer。但是如果我们使用Partitioner类,我不确定Sorting和Shuffling阶段何时运行?

3 个答案:

答案 0 :(得分:0)

更短暂的看法

下图解释了完整的细节。

从此图中,您可以看到Word Count应用程序的映射器和reducer组件所在的位置,以及它如何实现其目标。我们现在将更详细地研究这个系统。 MapReduce的流

enter image description here

答案 1 :(得分:0)

随机和排序阶段将始终执行(跨映射器和缩减器节点)。

MapReduce中不同阶段的层次结构如下:

地图 - >分区 - >组合器(可选) - >随机和排序 - >减少。

答案 2 :(得分:0)

简短的回答是:数据排序运行在Reducer,shuffling / sort运行之前 reducer(总是)和之后 map / combiner(如果有的话)/分区器(如果有的话)。

长期的答案是,在MapReduce工作中有4个主要参与者: 映射器组合器分区程序 Reducer 。所有这些都是您可以自己实际实现的类。

让我们采用着名的单词计数程序,让我们假设我们工作的分裂包含:

pippo, pluto, pippo, pippo, paperino, pluto, paperone, paperino, paperino

并且每个单词都是记录。

<强>映射

每个映射器都运行在文件的一个子集上,其任务是从拆分中读取每个记录,并为每个将输出的记录分配一个键。 Mapper会将中间结果存储在磁盘(本地磁盘)上。

此阶段的中间输出将是

pippo,1 
pluto,1
pippo,1
pippo,1
peperino,1
pluto,1
paperone,1
paperino,1
paperino,1

此处将存储在运行映射器的节点的本地磁盘上。

<强>合

这是一个迷你减速机,可以汇总数据。它也可以运行连接,所谓的map-join。此对象有助于将带宽节省到群集中,因为它会聚合本地节点上的数据。

组合器的输出仍然是映射器阶段的一部分,将是:

pippo,3
pluto,2
paperino,3
paperone,1

当然这里是来自ONE节点的数据。现在我们必须将数据发送到reducer以获得全局结果。哪个reducer将处理记录取决于分区程序。

<强>分区

它的任务是在所有可用的reducer之间传播数据。该对象将读取组合器的输出,并将选择将处理该键的reducer。

在这个例子中,我们有两个reducer,我们使用以下规则:

all the pippo goes to reducer 1
all the pluto goes to reducer 2
all the paperino goes to reducer 2 
all the paperone goes to reducer 1

所以所有节点都会将具有密钥pippo的记录发送到同一个reducer(1),所有节点都会将具有密钥pluto的记录发送到同一个reducer(2)等等......

以下是对数据进行混洗/排序的位置 ,并且由于组合器已经在本地减少了数据,因此该节点只需发送4条记录而不是9条记录。 / p>

<强>减速

此对象能够聚合来自每个节点的数据,并且还能够对数据进行排序。