Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MongoDB中使用Map Reduce计算简单移动平均_Mongodb_Hadoop_Mapreduce - Fatal编程技术网

在MongoDB中使用Map Reduce计算简单移动平均

在MongoDB中使用Map Reduce计算简单移动平均,mongodb,hadoop,mapreduce,Mongodb,Hadoop,Mapreduce,我偶然发现了这篇文章: 其中提到了如何使用Hadoop计算移动平均线 请注意,一个键的所有记录都应该进行排序,然后进行缩减。现在假设特定密钥的记录分布在Mongo集群的所有碎片上。在这种情况下,是否可以计算移动平均线 我知道Mongo会在每个节点上减少映射。解决此问题的首要要求是确保在单个减少阶段减少贴图的所有发射。如果是这样,那么Mongo Map Reduce将永远无法解决此类问题。有一些基本的误解吗 此外,拥有数十亿行和数PB的数据,为什么Hadoop Reduce phase不会因内存

我偶然发现了这篇文章:

其中提到了如何使用Hadoop计算移动平均线

请注意,一个键的所有记录都应该进行排序,然后进行缩减。现在假设特定密钥的记录分布在Mongo集群的所有碎片上。在这种情况下,是否可以计算移动平均线

我知道Mongo会在每个节点上减少映射。解决此问题的首要要求是确保在单个减少阶段减少贴图的所有发射。如果是这样,那么Mongo Map Reduce将永远无法解决此类问题。有一些基本的误解吗


此外,拥有数十亿行和数PB的数据,为什么Hadoop Reduce phase不会因内存不足而崩溃,因为它必须处理至少几TB的映射数据。

这是Hadoop可以更好地控制的地方,您需要使用MongoDB的两个MRs来完成这项工作。另外,关于未标记为问题的部分,这是因为MongoDB将部分存储在内存中,然后每个步骤都会写入临时表,因此如果一个步骤确实超过了允许的最大RAM,那么它将崩溃。您能否详细说明如何在MongoDB中执行此操作?如果每个节点都要减少该节点上的映射数据,则统计信息已经丢失。。正确的?如果你能用代码解释,那就太棒了。不,因为每个节点都有一个范围,所以理论上,当数据返回时,它应该能够对该碎片上所拥有的范围进行移动平均,这只是对所有节点返回的结果进行排序,以生成排序后的移动平均。这应该是可能的,当然,你必须得到第一个MR的结果,并将其反馈给第二个排序,以修复由于没有最后一个数据的真实值而产生的任何错误,这在我的头脑中并不完全清楚,但我相信如果给我一周的时间,我可能会想出一些办法,但在此之前,我会放弃使用Hadoop,你能解释一下为什么Hadoop不会因为这种计算而耗尽内存吗?据我所知,所有reduce都将发生在一个节点上,其中一个密钥的所有记录都将减少。这将导致该节点上的巨大内存开销,因为需要在该节点上显示TB的数据。。Hadoop是如何处理如此巨大的数据量的?我相信,与MongoDB不同,Hadoop就像处理大型连接时的SQL一样,会将内容写入磁盘,并在操作系统需要时使用swap作为某些内容的临时内存保持器进行只读。MongoDB在写入磁盘之前在RAM中做的更多,因此它将很容易退出