[英]MapReduce in MongoDB doesn't output
我試圖在一個集群上使用帶有mapReduce的MongoDB 2.4.3(也嘗試過2.4.4),每個集合包含2個分片。 我有一個問題,mapReduce作業的結果沒有減少到輸出集合。 我嘗試了增量貼圖減少 。 我也試過“合並”而不是減少,但這也沒有用。
map reduce命令在mongos上運行:( 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運行2條記錄,導致輸出2條記錄。 但是在兩個分片的postProcessCounts中,輸入計數保持為0。
地圖運行2條記錄。 如果這兩個記錄具有不同的鍵,則Map將輸出2個鍵和每個鍵的值。 這是正常的。
但是我在較早版本的MongoDB中注意到的事情(不確定這是否適用於你的情況)是,如果reduce階段的“values array”有一個長度,那么將會跳過reduce。
在第一種情況下輸出集合是空的嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.