用于排序mapreduce中间密钥的网络带宽瓶颈?

时间:2010-03-11 08:42:42

标签: hadoop mapreduce

我一直在学习mapreduce算法以及它如何可能扩展到数百万台机器,但我不明白在地图阶段之后如何对中间键进行排序,因为会有:

1,000,000 x 1,000,000

:潜在的机器相互传递中间结果的小键/值对?这不是瓶颈吗?

1 个答案:

答案 0 :(得分:7)

Hadoop MapReduce的一个瓶颈是集群中机器之间的网络带宽。但是,每个映射阶段的输出都不会发送到集群中的每台计算机。

map和reduce函数的数量由您正在运行的作业定义。每个映射处理其输入数据,对其进行排序以对密钥进行分组并将其写入磁盘。该作业定义了您希望应用于地图输出的减少函数的数量。

每个reduce都需要查看给定密钥的所有数据。因此,如果您为作业运行了单个reduce,则需要将每个映射的所有输出发送到运行该reduce的集群中的节点。在reduce运行之前,合并每个映射的数据以对所有键进行分组。

如果使用多个reducer,则map会对其输出进行分区,每次reduce会创建一个。分区被发送到正确的reduce。这可以确保给定密钥的所有数据都由单个reduce处理。

为了帮助减少需要通过网络发送的数据量,您可以将合并功能应用于地图的输出。这具有对地图输出执行减少的效果。因此,您可以最大限度地减少需要转移到Reducer的数据量,并加快整个作业的执行时间。