可以使用MapReduce从一个巨大的文件中有效地总结整数吗?

时间:2015-02-17 20:28:59

标签: java hadoop mapreduce sum

[文件太大,无法读入RAM。]

这是我的表述:

  • 映射器将获取每个整数x并发出('anything', x)
  • 在排序阶段,所有键值对都将按键分组:('anything', [x1, x2, x3, ...])
  • reducer将为每个键添加所有整数并发出总和。

但是因为我对所有键值对都有相同的键,所以它不会非常低效,因为有1个reducer会加总所有整数吗?

使用MapReduce解决此问题的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

要在一台计算机上统计这一点,您不需要将文件一次完全放在RAM中,但如果文件足够大以至于需要很长时间才能通过一台计算机传输它,那么您会发现一个很大的文件使用与您的reducer相同的组合器优化MapReduce算法。

组合器充当reducer,但在将结果发送到reducer之前为每个映射器运行。在这种情况下,您的单个reducer每个mapper只会收到一条记录 - 该映射器的总和。如果映射器通常处理128MB的数据(大文件的每个HDFS块的大小),则需要一个非常大的文件来为典型的单个减速器负担。

有关合并器的更多信息,请访问Apache Hadoop网站。