2017-08-08 3 views
3

J'ai utilisé l'implémentation Breeze du filtre Bloom dans l'étincelle Apache. Mon filtre Bloom attend 200000000 keys.But je suis face ci-dessous exception:Spark avec BloomFilter de milliards d'enregistrements provoque l'échec de la sérialisation Kryo: débordement de la mémoire tampon.

User class threw exception: org.apache.spark.SparkException: Job aborted due to stage failure: Task 1 in stage 5.0 failed 4 times, most recent failure: Lost task 1.3 in stage 5.0 (TID 161, SVDG0752.ideaconnect.com): org.apache.spark.SparkException: Kryo serialization failed: Buffer overflow. Available: 0, required: 1 

Je sais que pour éviter cela, je peux augmenter la valeur spark.kryoserializer.buffer.max, mais en raison des limitations de ressources du cluster je ne peux pas augmenter plus de 2 Go.

est en dessous du code:

val numOfBits=2147483647 
val numOfHashFun=13 
val bf = hierachyMatching.treeAggregate(new BloomFilter[String](numOfBits,numOfHashFun))(
    _ += _, _ |= _) 

où hierachyMatching est RDD de type String contenant 200M enregistrements.

Mes questions:

  • Comment puis-je aborder cette exception sans augmentation de la valeur buffer.max et comment?
  • Est-il possible de construire un filtre bloom qui contient plus de 2 milliards de bits sur étincelle avec la mémoire pilote 6512mb et Comment?

Toutes les idées ou suggestions liées à cela seront grandement appréciées. Merci d'avance.

Répondre

2

Essayez de spécifier spark.kryoserializer.buffer.max-1 gb (ou faire l'expérience avec cette propriété afin de sélectionner la valeur mieux) spark-default.conf (ou propriétés surchargées) et redémarrez votre service d'allumage, il devrait vous aider.

+0

J'ai déjà essayé de donner la taille spark.kryoserializer.buffer.max jusqu'à 2gb (dans les paramètres d'exécution), mais il me donne encore la même exception et je ne peux pas l'augmenter de plus de 2 Go. – mayur

+0

@mayur essayez d'utiliser la propriété 'spark.kryoserializer.buffer.max.mb' et la valeur' 512' –

+0

ne fonctionne toujours pas. Si cela ne fonctionne pas avec 2gb alors comment cela fonctionnera-t-il avec seulement 512mb? – mayur