spark rdd.count()会产生不一致的结果

relj7zay  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(657)

我有点困惑。
一个简单的rdd.count()在多次运行时会给出不同的结果。
下面是我运行的代码:

val inputRdd = sc.newAPIHadoopRDD(inputConfig,
classOf[com.mongodb.hadoop.MongoInputFormat],
classOf[Long],
classOf[org.bson.BSONObject])

println(inputRdd.count())

它打开一个到mondodb服务器的连接并简单地计算对象。我觉得很直截了当
根据mongodb的数据,共有3349495个条目
这是我的Spark输出,都运行相同的jar:

spark1 :    3.257.048  
spark2 :    3.303.272  
spark3 :    3.303.272  
spark4 :    3.303.272  
spark5 :    3.303.271   
spark6 :    3.303.271  
spark7 :    3.303.272  
spark8 :    3.303.272  
spark9 :    3.306.300  
spark10:    3.303.272  
spark11:    3.303.271

spark和mongodb在同一个集群上运行。
我们正在运行:

Spark version 1.5.0-cdh5.6.1  
Scala version 2.10.4  
MongoDb version 2.6.12

很遗憾,我们无法更新这些
Spark是不确定的吗?
有没有人能启发我?
提前谢谢
编辑/进一步信息
我刚注意到mongod.log中有个错误。这个错误会导致不一致的行为吗?

[rsBackgroundSync] replSet not trying to sync from hadoop04:27017, it is vetoed for 333 more seconds
[rsBackgroundSync] replSet syncing to: hadoop05:27017
[rsBackgroundSync] replSet not trying to sync from hadoop05:27017, it is vetoed for 600 more seconds
[rsBackgroundSync] replSet not trying to sync from hadoop04:27017, it is vetoed for 333 more seconds
[rsBackgroundSync] replSet not trying to sync from hadoop05:27017, it is vetoed for 600 more seconds
[rsBackgroundSync] replSet not trying to sync from hadoop04:27017, it is vetoed for 333 more seconds
[rsBackgroundSync] replSet error RS102 too stale to catch up, at least from hadoop05:27017
[rsBackgroundSync] replSet our last optime : Jul  2 10:19:44 57777920:111
[rsBackgroundSync] replSet oldest at hadoop05:27017 : Jul  5 15:17:58 577bb386:59
[rsBackgroundSync] replSet See http://dochub.mongodb.org/core/resyncingaverystalereplicasetmember
[rsBackgroundSync] replSet error RS102 too stale to catch up
8wtpewkr

8wtpewkr1#

count 返回估计的计数。因此,即使文档的数量没有改变,返回的值也可以改变。
countdocuments被添加到mongodb 4.0中以提供准确的计数(这也适用于多文档事务)。

4ioopgfo

4ioopgfo2#

正如您已经发现的,问题似乎不在spark(或scala)上,而在mongodb上。
因此,关于分歧的问题似乎得到了解决。
您仍然需要对实际的mongodb错误进行故障排除,提供的链接可以作为一个很好的起点:http://dochub.mongodb.org/core/resyncingaverystalereplicasetmember

相关问题