【问题标题】:Mapper vs Reducer Computation Time and effect on network performance HadoopMapper vs Reducer 计算时间和对网络性能的影响 Hadoop
【发布时间】:2013-06-05 03:28:03
【问题描述】:

我必须从 n 个候选者的列表中生成 n*(n-1)/2 个候选对。

这可以在每个 mapper 实例或每个 reducer 实例中完成。

但是我观察到,当这个操作在 Reduce 阶段完成时,它比在 Map 阶段完成的要快得多。是什么原因?

Mappers 能否不支持繁重的计算?

Mapper 实例进行这样的计算对网络有什么影响?

谢谢!

【问题讨论】:

  • 你用谷歌搜索过吗??
  • 是的..我找到任何答案

标签: java performance hadoop mapreduce elastic-map-reduce


【解决方案1】:

简短的回答是:当使用mapper生成数据时,Hadoop必须将数据从mapper复制到redcuer,这花费了太多时间。

结果总数据大小

生成的总数据为O(n^2)

mapper VS reducer 生成数据对比

如果您使用映射器生成n*(n-1)/2 对,则必须将中间数据复制到reducer。 Hadoop 中的这一步被命名为 Shuffle Phase。而reducer 仍然需要将这些数据放到HDFS 中。 shuffle阶段你的事业中从Harddisk读/写的数据总量可以是6* sizeof(intermediate data),非常大。

而如果数据是由reducer生成的,则不需要O(n^2)中间数据转换。所以它可以有更好的性能。

所以您的性能问题主要是由数据转换引起的,而不是计算引起的。如果没有磁盘访问,mapper 和 reducer 的性能是一样的。

提高映射器数据生成策略性能的方法

如果你还想用mapper生成数据,可能是io.sort.factor,开启压缩可能有助于提升性能。

【讨论】:

  • 感谢您的回复!我的是一个临界条件,这个计算可以在前一阶段的reduce阶段或者当前阶段的mapper中完成,而这些候选对是当前阶段的reducer所需要的。因此,如果我在当前阶段的映射器中执行此操作,我将避免再次将这些对写入 HDFS。在任何情况下,sr 对都不会通过 shuffle。我什至将 reducer 的数量设置为零,以测试 map 的性能,因为 mapper 的输出将直接写入 hdfs,不涉及 shuffle。
  • 通过这样做,我观察到 Map 的执行速度仍然比 reduce 慢。不要你!
  • 你的集群有多大?
猜你喜欢
  • 2019-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
  • 1970-01-01
  • 1970-01-01
  • 2020-07-07
  • 1970-01-01
相关资源
最近更新 更多