Mapper与Reducer计算时间和对网络性能的影响Hadoop

时间:2013-06-05 03:28:03

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

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

这可以在每个映射器实例或每个reducer实例中完成。

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

Mappers不支持繁重的计算吗?

Mapper实例在网络上进行此类计算的影响是什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

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

结果总数据大小

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

mapper VS reducer的数据生成比较

如果使用mapper生成n*(n-1)/2对,则必须将中间数据复制到reducer。 Hadoop中的此步骤命名为 Shuffle Phase 。和reducer仍然需要将这些数据放到HDFS中。在随机播放阶段,您的原因中硬盘读取/写入的总数据可能是6* sizeof(intermediate data),这非常大。

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

因此,您的性能问题主要是由数据转换引起的,而不是计算引起的。如果没有磁盘访问,则mapper和reducer只具有相同的性能。

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

如果您仍想使用mapper生成数据,可能是io.sort.factor,启用压缩可能有助于提高性能。