MapReduce 能否用于从一个巨大的文件中有效地求和整数?

Can MapReduce be used to efficiently sum up integers from a huge file?

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

这是我的公式:

但是因为我对所有键值对都有相同的键,这不是很低效吗,因为会有 1 个 reducer 将所有整数相加?

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

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

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

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