我开始学习 Hadoop,对 MapReduce 有点困惑。对于结果本身是键值对列表的任务,一切似乎都很清楚。但我不明白我应该如何解决结果是单个值的任务(例如,输入小数平方和,或输入点的质心)。
一方面,我可以将映射器的所有结果放到同一个键上。但据我所知,在这种情况下,唯一的 reducer 将管理整个数据集(计算总和或平均坐标)。这看起来不是一个好的解决方案。
我可以成像的另一个是对映射器结果进行分组。比如说,处理示例 0-999 的映射器将产生等于 0 的键,1000-1999 将产生等于 1 的键,依此类推。只要reducer 仍然会有多个结果,就需要建立reducer 链(reducing 将重复直到只剩下一个结果)。它看起来更有效的计算,但有点复杂。
我仍然希望 Hadoop 有现成的工具来执行 reducer 的叠加,以最大限度地提高将整个数据归约为单个值的效率。虽然我没找到。
解决结果为单个值的任务的最佳实践是什么?