MapReduce可以用来有效地汇总来自一个巨大文件的整数吗



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

这是我的配方:

  • 映射器将取每个整数CCD_ 1并发射CCD_
  • 在排序阶段,所有键值对将按关键字('anything', [x1, x2, x3, ...])进行分组
  • reducer会将每个键的所有整数相加,并发出总和

但是,既然我对所有的键值对都有相同的键,这不是很低效吗?因为会有一个减少器将所有整数相加?

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

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

组合器充当还原器,但在将结果发送到还原器之前为每个映射器运行。在这种情况下,您的单个reducer将只收到每个映射器一条记录,即该映射器的总和。映射器通常处理128MB的数据(相当于一个巨大文件的每个HDFS块的大小),对于一个典型的单个缩减器来说,您需要一个非常大的文件。

关于组合器的更多信息可以在Apache Hadoop网站上找到。

相关内容

  • 没有找到相关文章

最新更新