2017-01-25 29 views
9

Jestem trochę zaskoczony.Spark rdd.count() daje niespójne wyniki

Prosty rdd.count() daje różne wyniki po uruchomieniu wiele razy.

Oto kod biegnę:

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

println(inputRdd.count()) 

To otwiera połączenie z serwerem MondoDb i po prostu zlicza obiekty. wydaje się dość proste do mnie

Według MongoDB istnieją 3,349,495 wpisy

Oto moje wyjście iskra, wszystko prowadził sam słoik:

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 i MongoDB są prowadzone w tym samym klastrze .
Biegniemy:

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

Niestety nie możemy zaktualizować te

Czy Spark zakaz deterministyczny?
Czy jest ktoś, kto może mnie oświecić?

góry dzięki

EDIT/Dalsze informacje
Właśnie zauważyłem błąd w naszym mongod.log. Czy ten błąd może spowodować niespójne zachowanie?

[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

Czy sprawdzić liczbę wpisów w MongoDB kilka razy (równolegle z prowadzeniem zapłonową 'count () ')? – Yaron

+0

Liczba pozycji w MongoDb nie została zmieniona podczas działania. Dziękuję za zreformowanie :) – PeterLudolf

+1

a) Jaka jest topologia wdrożenia MongoDB? (zestaw replik lub klastra sharded?) Być może robot iskrowy zwraca inną odpowiedź na podstawie członków MongoDB, tzn. niektórzy członkowie nie replikowali jeszcze danych. b) MongoDB v2.6 osiągnął koniec swojego życia w październiku 2016 r., w miarę możliwości uaktualnij go. –

Odpowiedz

0

Jak już zauważyłeś, problem nie wygląda na iskrę (lub scala), ale na MongoDB.

Jako takie pytanie dotyczące różnicy wydaje się być rozwiązane.

Nadal będzie chciał rozwiązać rzeczywisty błąd MongoDB, dostarczony link może być dobrym punktem wyjścia do tego: http://dochub.mongodb.org/core/resyncingaverystalereplicasetmember

Powiązane problemy