我试图了解如何使用mapreduce 找到一个非常大的文件的最小值、最大值、平均值。将 reduce task 数设置为 1 是一个显而易见的解决方案,但对于非常大的文件来说并不是最佳选择。我也在考虑编写一个链接 MR 作业,但最终,您最终在最终作业中使用了一个 reducer 。有人可以阐明任何其他方式来做到这一点吗?
谢谢
最佳答案
无论您的输入数据集有多大,我认为在这里使用 1 个 reducer 没有任何问题。为此,您应该使用组合器功能,该功能将返回其本地最大值、本地最小值、本地 TotalSum 和计数,并传递给单个 reducer 。这样,到达 reducer 的数据量就会非常少(与映射器的数量成正比)。一旦这些小数据到达单个 reducer ,您就可以找到全局最大值和最小值,并将总和除以总计数作为平均值。
关于hadoop - 我可以在不设置mapred.reduce.tasks=1的情况下在mapreduce程序中找到min、max或avg吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37532214/