Java Mapper vs Reducer计算时间及其对网络性能的影响Hadoop

Java Mapper vs Reducer计算时间及其对网络性能的影响Hadoop,java,performance,hadoop,mapreduce,elastic-map-reduce,Java,Performance,Hadoop,Mapreduce,Elastic Map Reduce,我必须从n个候选列表中生成n*(n-1)/2个候选对 这可以在每个mapper实例或每个reducer实例中完成 但我观察到,当这个操作在Reduce阶段完成时,它要比Map阶段快得多。原因是什么 映射程序不能支持繁重的计算吗 映射器实例在网络上执行此类计算会产生什么影响 谢谢 简单的回答是:当使用mapper生成数据时,Hadoop必须将数据从mapper复制到redcuer,这花费了太多的时间 结果总数据大小 生成的总数据为O(n^2) mapper与reducer生成数据的比较 如果使用映

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

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

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

映射程序不能支持繁重的计算吗

映射器实例在网络上执行此类计算会产生什么影响


谢谢

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

结果总数据大小 生成的总数据为
O(n^2)

mapper与reducer生成数据的比较 如果使用映射器生成
n*(n-1)/2对
,则必须将中间数据复制到减速器。Hadoop中的这一步被命名为洗牌阶段。reducer仍然需要将这些数据放到HDFS中。在洗牌阶段,从硬盘读取/写入的数据总量可能是
6*sizeof(中间数据)
,非常大

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

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

提高mapper数据生成策略性能的方法
如果您仍然想使用mapper生成数据,那么启用压缩可能有助于提高性能。

您在谷歌上搜索过吗?是的。。我找不到任何答案谢谢你的答复!Mine是一个关键条件,在此条件下,此计算可以在前一阶段的reduce阶段或当前阶段的mapper中完成,并且当前阶段的reducer需要这些候选对。因此,如果我在当前阶段的映射器中这样做,我将避免再次将这些对写入HDFS。在任何情况下,SR对都不能通过洗牌。。为了测试map的性能,我甚至将reducer的数量设置为零,因为mapper的输出将直接写入hdfs,而不涉及洗牌。通过这样做,我发现map的执行速度仍然比reduce慢。唐尼!你的集群有多大?