我正在编写简单的 mapreduce 程序来查找我的数据(许多文本文件)中存在的平均值、最小数字和最大数字。我想使用组合器首先在单个映射器处理的数字中找到所需的内容使其更有效率。
但是我担心的事实是,为了能够找到平均数、最小数或最大数,我们需要来自所有映射器(以及所有组合器)的数据进入一个单一的 reducer ,这样我们可以找到通用平均值、最小数或最大数。这在更大的数据集的情况下将是一个巨大的瓶颈。
我确信在 hadoop 中会有一些我可能想不到的方法来处理这个问题。有人可以指导我吗?我在几次面试中也被问到过这类问题。
另外,在运行我的“查找平均值”mapreduce 程序时,我遇到了一个问题,唯一运行的映射器需要很长时间才能完成。我也增加了映射任务超时,但它仍然卡住了。而在 stdout 日志的帮助下,我发现我的映射器和组合器执行顺利。因此我无法弄清楚是什么导致我的 mapreduce 作业挂起。
最佳答案
可以根据数据流计算平均值。尝试坚持以下几点:
- 当前平均值
- 元素个数
这样您就可以知道给传入号码和一批号码赋予多少权重。
这里有一些解决方案:
关于hadoop - 如何在大型数据集中找到全局平均值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31578153/