我一直使用Mongo DB作为独立实例,对我的数据进行一些分析。
但随着我的数据量不断增长,我开始尝试使用Mongo DB Cluster。
我的群集配置如下:
3台机器(2核CPU,2 GB RAM,30 GB硬盘)
1)机器1 - mongos,mongod,mongo配置服务器(Hostname-config2)
2)机器2 - mongod,mongo配置服务器(Hostname-config3)
3)机器3 - mongo配置服务器(Hostname-config1)
我使用了MongoDB的Map-Reduce功能,我观察到,如果是分片群集,当输出定向到分片集合时,map-reduce会输出错误的输出。在独立的mongo实例中没有观察到这个问题。
我有一个名为“user_data”的输入集合和一个名为“intermediate_data”的输出集合。我尝试在单个实例mongo和mongo集群上执行map-reduce代码,并在“intermediate_data”集合中检查已检查的条目数。
以下是独立实例中的输出(这是正确的输出):
MongoDB shell版本:2.4.5
连接到:test
使用analysis_data_shekhar_test
切换到db analysis_data_shekhar_test
db.intermediate_data.find()。itcount()
1090900
Mongo Cluster:
mongos>使用analysis_data_shekhar_test
切换到db analysis_data_shekhar_test
mongos> db.intermediate_data.find()。itcount()
934832
我在mongo集群的一个分片中观察到mongod.log,它显示输出计数为1090900(这是正确的输出行数),但集合中的行数(934832)远小于此:
Mon Jan 6 22:45:05.352 [conn139] command analysis_data_shekhar_test。$ cmd command:{mapreduce.shardedfinish:{mapreduce:“user_data”,map:function(){ var sid = this.sid; var ...,reduce:function(mac,mac_info_list){ var result = {loclist_07:[],cou ...,scope:{bitmap30:4294967166,bitmap14:4278190206,num7:7,bitmap7:2147483774,num14:14,num30:30},query:{sid:{$ in :[1,2,3,4,5}}},out:{merge:“intermediate_data”,sharded:true}},inputDB:“analysis_data_shekhar_test”,shardedOutputCollection:“tmp.mrs.user_data_1389028296_86”,分片:{config3 :27018:{result:“tmp.mrs.user_data_1389028296_86”,splitKeys:[{_ id:{mac:“aa:aa:aa:aa:aa:aa”,ssid:“ABC”}},{_ id:{mac :“bb:bb:bb:bb:bb:bb”,ssid:“”}},{_ id:{mac:“cc:cc:cc:cc:cc:cc”,ssid:“XYZ”}}, {_id:{mac:“dd:dd:dd:dd:dd:dd”,ssid:“”}},{_ id:{mac:“ee:ee:ee:ee:ee:ee”,ssid:“ “}},{_ id:{mac:”ff:ff:ff:ff:ff:ff“,ssid:”XYZ“}}],timeMillis:183410,count:{input:596103,emit:1192206,reduce: 89217,输出: 1090900 },ok:1.0}},shardCounts:{config3:27018:{input:596103,emit:1192206,reduce:89217,output: 1090900 },count:{emit:1192206,输入:59 6103,输出: 1090900 ,减少:89217}} ntoreturn:1 keyUpdates:0 lock(micros)W:2509 w:12843472 reslen:721 23709ms
有人可以告诉我为什么集合中的行数少于日志中显示的“out”数?
我尝试在google和stackoverflow上搜索类似的问题,但没有找到任何结果。
请帮忙。