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.
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
@mayur essayez d'utiliser la propriété 'spark.kryoserializer.buffer.max.mb' et la valeur' 512' –
ne fonctionne toujours pas. Si cela ne fonctionne pas avec 2gb alors comment cela fonctionnera-t-il avec seulement 512mb? – mayur