2017-01-25 7 views
9

Я немного озадачен.Spark rdd.count() дает непоследовательные результаты

Простой rdd.count() дает разные результаты при запуске несколько раз.

Вот код я бегу:

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

println(inputRdd.count()) 

Это открывает соединение с сервером MondoDb и просто подсчитывает объекты. Кажется довольно прямо вперед, мне

По MongoDb есть 3,349,495 записей

Вот моя искра выходной, все побежали ту же банку:

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 

Спарк и MongoDb выполняющиеся на том же кластере ,
Мы бежим:

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

К сожалению, мы не можем обновить эти

искра недетерминирована?
Есть ли кто-нибудь, кто может просветить меня?

Заранее спасибо

EDIT/Другой информации
Я просто заметил ошибку в нашем 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 
+5

Вы проверяли количество записей в MongoDB несколько раз (параллельно работает искровой 'счетчик () ')? – Yaron

+0

Число записей в MongoDb не было изменено во время работы. И спасибо за реформацию :) – PeterLudolf

+1

a) Какова ваша топология развертывания MongoDB? (набор реплик или осколок кластера?) Возможно, искровые рабочие возвращают разные ответы на основе членов MongoDB, то есть некоторые из членов еще не реплицировали данные. b) MongoDB v2.6 достиг своего конца октября 2016 года, пожалуйста, обновите, когда это возможно. –

ответ

0

Как вы уже заметили, что проблема не появляется, чтобы быть с искрой (или) Скале, но с MongoDB.

Как таковой, вопрос о различии, похоже, будет разрешен.

Вы все еще хотите, чтобы устранить фактическую ошибку MongoDB, предоставленная ссылка может быть хорошей отправной точкой для этого: http://dochub.mongodb.org/core/resyncingaverystalereplicasetmember