我可以在没有设置mapred.reduce.tasks = 1的情况下发现min,max或avg mapred.reduce.tasks = 1
问题描述:
我试图了解如何使用mapreduce查找非常大文件的min,max,Avg。将减少任务的数量设置为1,这是一个明显的解决方案,但对于非常大的文件来说这不是最佳的。我也在考虑写一份链接MR工作,但最终你最终会在最后的工作中使用一个减速器。有人可以通过其他方式来解决问题。我可以在没有设置mapred.reduce.tasks = 1的情况下发现min,max或avg mapred.reduce.tasks = 1
感谢
答
你需要编写逻辑弄清楚最小,最大或平均在减速器类。此外,我相信找出一个非常大的文件的min,max,avg将生成一个单一的输出文件。
+0
那么..写入减速器内部的逻辑是不可避免的,必须要做到这一点。我担心的是只使用一个reducer,但它是有意义的,因为最终的输出应该是单个文件。感谢您的投入。 –
答
我在这里看不到使用1个缩放器的问题,无论你的输入数据集是多大。为此,您应该使用组合器功能,它将返回其本地最大值,本地最小值,本地TotalSum和Count值并传递给单个reducer。这样,直到还原器的数据量非常少(与映射器数量成正比)。一旦这些小数据到达单个还原器,您可以找到全局最大值和最小值,并将总和除以总计数。
如果您认为有一个减速器不是最佳的,那么您可以尝试在使用一个减速器之前使用组合器。我相信你不会被要求在min&max的情况下做一个大的代码/逻辑改变。 – Makubex