代码之家  ›  专栏  ›  技术社区  ›  yazz.com

MapReduce中间密钥排序的网络带宽瓶颈?

  •  5
  • yazz.com  · 技术社区  · 14 年前

    我一直在学习mapreduce算法,以及它如何可能扩展到数百万台机器,但我不理解在映射阶段之后中间键的排序如何可以扩展,因为会有:

    1000000 x 1000000

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

    1 回复  |  直到 12 年前
        1
  •  7
  •   Binary Nerd    14 年前

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

    map和reduce函数的数量由正在运行的作业定义。每个映射处理其输入数据,对其进行排序,将键分组并将其写入磁盘。该作业定义要应用于映射输出的reduce函数的数量。

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

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

    为了帮助减少通过网络发送的数据量,可以对地图的输出应用组合函数。这会对映射的输出运行reduce。因此,您可以最小化需要传输到减速器的数据量,并加快整个作业的执行时间。