我一直在学习mapreduce算法以及它如何可能扩展到数百万台机器,但我不明白在地图阶段之后如何对中间键进行排序,因为它将会:
1,000,000 x 1,000,000
:潜在的机器相互传递中间结果的小键/值对?这不是瓶颈吗?
Hadoop MapReduce的一个瓶颈是群集中机器之间的网络带宽.但是,每个映射阶段的输出不会发送到群集中的每台计算机.
map和reduce函数的数量由您正在运行的作业定义.每个映射处理其输入数据,对其进行排序以对密钥进行分组并将其写入磁盘.该作业定义了您希望应用于地图输出的减少功能的数量.
每个reduce都需要查看给定密钥的所有数据.因此,如果您为作业运行了单个reduce,则需要将每个映射的所有输出发送到运行该reduce的集群中的节点.在reduce运行之前,将合并每个映射的数据以对所有键进行分组.
如果使用多个reducer,则map会对其输出进行分区,每次reduce会创建一个.分区被发送到正确的reduce.这确保了单个reduce处理给定键的所有数据.
为了帮助减少需要通过网络发送的数据量,您可以将合并功能应用于地图的输出.这具有对地图输出执行减少的效果.因此,您可以最大限度地减少需要传输到Reducer的数据量,并加快整个作业的执行时间.