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



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

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

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

映射器可以不支持繁重的计算吗?

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

谢谢!

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

result总数据大小

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

mapper与reducer生成数据的比较

如果使用mapper生成n*(n-1)/2对,中间数据必须复制到reducer。这个步骤在Hadoop中被命名为Shuffle Phase。和reducer仍然需要将这些数据放到HDFS中。在shuffle阶段,您的cause中从硬盘读/写的数据总量可以达到6* sizeof(intermediate data),这是非常大的。

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

所以你的性能问题主要是由数据转换引起的,而不是计算。如果没有磁盘访问,映射器和reducer具有相同的性能。

改进映射器数据生成策略性能的方法

如果您仍然希望使用mapper来生成数据,可能是io.sort.factor,打开压缩可能有助于提高性能。

相关内容

  • 没有找到相关文章

最新更新