我开始学习 Hadoop,对 MapReduce 有点困惑。对于结果本身是键值对列表的任务,一切似乎都很清楚。但我不明白我应该如何解决结果为单个值的任务(例如,输入小数的平方和,或输入点的质心)。
一方面,我可以将映射器的所有结果放入同一个键。但据我所知,在这种情况下,唯一的 reducer 将管理整个数据集(计算总和或平均坐标)。这看起来不是一个好的解决方案。
我可以成像的另一个方法是对映射器结果进行分组。比如说,处理示例 0-999 的映射器将生成等于 0 的键,1000-1999 将生成等于 1 的键,依此类推。至于 reducers 仍然会有多个结果,则有必要构建 reducers 链(将重复减少直到只剩下一个结果)。它看起来计算效率更高,但有点复杂。
我还是希望Hadoop有现成的工具,执行reducer的叠加,以最大限度地提高将整个数据归约为单个值的效率。虽然我没有找到。
解决结果为单个值的任务的最佳做法是什么?
最佳答案
如果您能够根据可交换减少重新制定您的任务,您应该查看 Combiners .无论您如何看待它,它都可以显着减少要洗牌的数据量。
关于哈多普。将结果缩减为单个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12822687/