gpt4 book ai didi

mongodb - MongoDB中的MapReduce不输出

转载 作者:IT老高 更新时间:2023-10-28 13:14:22 24 4
gpt4 key购买 nike

我试图在一个集群上使用 MongoDB 2.4.3(也尝试过 2.4.4)和 mapReduce,该集群有 2 个分片,每 3 个副本。我对 mapReduce 作业的结果没有被缩减为输出集合有疑问。我试过 Incremental Map Reduce .我也尝试过“合并”而不是减少,但这也没有用。

在 mongos 上运行 map reduce 命令:(coll 未分片)

db.coll.mapReduce(map, reduce, {out: {reduce: "events", "sharded": true}})

产生以下输出:

{
"result" : "events",
"counts" : {
"input" : NumberLong(2),
"emit" : NumberLong(2),
"reduce" : NumberLong(0),
"output" : NumberLong(28304112)
},
"timeMillis" : 418,
"timing" : {
"shardProcessing" : 11,
"postProcessing" : 407
},
"shardCounts" : {
"stats2/192.168.…:27017,192.168.…" : {
"input" : 2,
"emit" : 2,
"reduce" : 0,
"output" : 2
}
},
"postProcessCounts" : {
"stats1/192.168.…:27017,…" : {
"input" : NumberLong(0),
"reduce" : NumberLong(0),
"output" : NumberLong(14151042)
},
"stats2/192.168.…:27017,…" : {
"input" : NumberLong(0),
"reduce" : NumberLong(0),
"output" : NumberLong(14153070)
}
},
"ok" : 1,
}

所以我看到 mapReduce 运行了 2 条记录,这导致输出了 2 条记录。然而,在两个分片的 postProcessCounts 中,输入计数保持为 0。同时尝试通过搜索 _id 来查找记录不会产生任何结果。在 MongoDB 的日志文件中,我找不到与此相关的错误消息。

在尝试使用新创建的输出集合重现此内容后,我还在散列 _id 上进行了分片,并且我还提供了相同的索引,但我无法重现此内容。将相同的输入输出到不同的集合时

db.coll.mapReduce(map, reduce, {out: {reduce: "events_test2", "sharded": true}})

结果存储在输出集合中,我得到以下输出:

{
"result" : "events_test2",
"counts" : {
"input" : NumberLong(2),
"emit" : NumberLong(2),
"reduce" : NumberLong(0),
"output" : NumberLong(4)
},
"timeMillis" : 321,
"timing" : {
"shardProcessing" : 68,
"postProcessing" : 253
},
"shardCounts" : {
"stats2/192.168.…:27017,…" : {
"input" : 2,
"emit" : 2,
"reduce" : 0,
"output" : 2
}
},
"postProcessCounts" : {
"stats1/192.168.…:27017,…" : {
"input" : NumberLong(2),
"reduce" : NumberLong(0),
"output" : NumberLong(2)
},
"stats2/192.168.…:27017,…" : {
"input" : NumberLong(2),
"reduce" : NumberLong(0),
"output" : NumberLong(2)
}
},
"ok" : 1,
}

当再次运行脚本并在第二个集合中再次输出相同的输入时,它表明它在 postProcessCounts 中正在减少。所以 map 和 reduce 函数可以很好地完成它们的工作。为什么它不适用于较大的第一个集合?我在这里做错了吗?可用作 map-reduce 输出的集合是否有任何特殊限制?

最佳答案

mapReduce is run over 2 records, which results in 2 records outputted. However in the postProcessCounts for both shards the input count stays 0.

map 运行超过 2 条记录。如果这两条记录具有不同的键,则 Map 将输出 2 个键和每个键的值。这是正常的。

但是我在旧版本的 MongoDB 中注意到的一些事情(不确定这是否适用于您的情况)是,如果 reduce 阶段的“值数组”有长度,那么 reduce 将被跳过。

第一种情况下输出集合是空的吗?

关于mongodb - MongoDB中的MapReduce不输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16972086/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com