Mar*_*ark 11 mapreduce mongodb
我试图在一个集群上使用带有mapReduce的MongoDB 2.4.3(也尝试过2.4.4),每个3个副本有2个分片.我有一个问题,mapReduce作业的结果没有减少到输出集合.我尝试了增量贴图减少.我也试过"合并"而不是减少,但这也没有用.
map reduce命令在mongos上运行:( coll不分片)
db.coll.mapReduce(map, reduce, {out: {reduce: "events", "sharded": true}})
Run Code Online (Sandbox Code Playgroud)
产生以下输出:
{
"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,
}
Run Code Online (Sandbox Code Playgroud)
所以我看到mapReduce运行了2条记录,导致输出2条记录.但是在两个分片的postProcessCounts中,输入计数保持为0.同时尝试通过在_id上搜索来查找记录不会产生任何结果.在MongoDB的日志文件中,我无法找到与此相关的错误消息.
在尝试使用新创建的输出集合重现它之后,我还在散列_id上进行了分片,并且我也给出了相同的索引,我无法重现这一点.将相同输入输出到其他集合时
db.coll.mapReduce(map, reduce, {out: {reduce: "events_test2", "sharded": true}})
Run Code Online (Sandbox Code Playgroud)
结果存储在输出集合中,我得到以下输出:
{
"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,
}
Run Code Online (Sandbox Code Playgroud)
当在第二个集合中再次使用相同的输入输出再次运行脚本时,它会显示它在postProcessCounts中正在减少.因此map和reduce函数可以很好地完成工作.为什么它不适用于较大的第一个系列?我在这里做错了吗?对可用作map-reduce输出的集合有任何特殊限制吗?
小智 0
mapReduce 对 2 条记录运行,结果输出 2 条记录。然而,在两个分片的 postProcessCounts 中,输入计数保持为 0。
地图运行 2 条记录。如果这两个记录有不同的键,那么 Map 将输出 2 个键和每个键的值。这是正常的。
但我在旧版本的 MongoDB 中注意到(不确定这是否适用于您的情况)是,如果归约阶段的“值数组”有长度,则归约将被跳过。
第一种情况下输出集合是否为空?
归档时间: |
|
查看次数: |
1084 次 |
最近记录: |