为什么当reducer达到一定数量时,Hadoop作业的时间会显着减少

Why the time of Hadoop job decreases significantly when reducers reach certain number

我测试了基于 MapReduce 的算法在 reducer 数量不断增加的情况下的可扩展性。总体上看起来不错(时间随着减速器的增加而减少)。但是当 reducer 达到一定数量(我的 hadoop 集群中为 30)时,工作时间总是显着减少,而不是逐渐减少。可能的原因是什么?

关于我的 Hadoop 工作的一些事情: (1) 光照贴图阶段。只有几百行输入。每行将生成大约五千个键值对。整个地图阶段不会超过 2 分钟。 (2) 重减少阶段。 reduce 函数中的每个键将匹配 1-2 千个值。并且 reduce 阶段的算法是非常计算密集型的。一般来说,reduce 阶段大约需要 30 分钟才能完成。

时间性能图:

恕我直言 如果有足够数量的 reducers 可用,每个 reduce 阶段之间的网络 IO(传输中间结果)会减少。
由于网络 IO 通常是大多数 Map-Reduce 程序的瓶颈。所需网络 IO 的减少将带来显着改善。

应该是因为key-value pair的数目偏高。在特定的减速器中,它们被平均分配给减速器,这导致所有减速器几乎以相同的速度执行任务 time.Otherwise 可能是组合器继续等待 1 或 2 个重负载减速器完成的情况有工作。