地图缩小侧的同一机器数据处理减少

时间:2013-09-12 03:49:53

标签: hadoop io mapreduce

Hadoop MapReduce的一大好处是,Map进程发生在与其运行的数据相同的机器上(尽可能)。但这可能是或者这可能是Reduce方面的真实情况吗?例如,在仅限Map的作业的极端情况下,所有输出数据最终与相应的输入数据在同一台机器上(右?)。但是在输出与输出有些相关的中间情况下,对输出进行分区似乎是合理的,并且尽可能将它保持在同一台机器上。

这可能吗?这已经发生了吗?

2 个答案:

答案 0 :(得分:2)

Reducers的输入可以驻留在任何节点(本地或远程)上,而不一定位于运行它们的同一台机器上。当Mappers完成输出时,它们将被写入运行它们的机器的本地FS。完成此操作后,即将运行reduce任务的计算机需要中间输出。这里需要注意的一点是,与特定键对应的所有值都是相同的reducer。因此,Reducers的输入并不总是可能是本地的,因为不同机器上运行的不同Mapper处理不同的键/值对。

现在,在将Mapper输出发送到Reducers进行进一步处理之前,数据将根据键进行分区,每个分区都会转到Reducer,该分区中的所有键/值对都会被该Reducer处理。在此过程中,会发生大量数据混乱。因此,在Reducers的情况下,不可能保持数据位置。

希望这能回答这个问题。

答案 1 :(得分:1)

如果您知道特定reducer的数据在映射阶段之后已经在右侧节点上,并且算法允许它(请参阅this blog post有关它),则应将reducer作为组合器插入。组合器就像微型减速器,只能看到共同定位的数据。通常,您可以显着提高性能,因为组合器输出可以比地图输出小几个数量级,因此剩下的随机播放是微不足道的。

当然,如果确实地图阶段的数据已经正确分区,为什么要使用减速器呢?为什么不创建一个模拟减速器的第二个地图作业?