Comment Kryo sérialiseur alloue de la mémoire tampon dans Spark
S'il vous plaît aider à comprendre comment Kryo sérialiseur alloue de la mémoire pour son tampon.
Mon Étincelle application échoue sur une recueillons étape quand il essaie de rassembler sur 122Mb de données à un pilote de travailleurs.
com.esotericsoftware.kryo.KryoException: Buffer overflow. Available: 0, required: 57197
at com.esotericsoftware.kryo.io.Output.require(Output.java:138)
at com.esotericsoftware.kryo.io.Output.writeBytes(Output.java:220)
at com.esotericsoftware.kryo.io.Output.writeBytes(Output.java:206)
at com.esotericsoftware.kryo.serializers.DefaultArraySerializers$ByteArraySerializer.write(DefaultArraySerializers.java:29)
at com.esotericsoftware.kryo.serializers.DefaultArraySerializers$ByteArraySerializer.write(DefaultArraySerializers.java:18)
at com.esotericsoftware.kryo.Kryo.writeObjectOrNull(Kryo.java:549)
at com.esotericsoftware.kryo.serializers.DefaultArraySerializers$ObjectArraySerializer.write(DefaultArraySerializers.java:312)
at com.esotericsoftware.kryo.serializers.DefaultArraySerializers$ObjectArraySerializer.write(DefaultArraySerializers.java:293)
at com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.java:568)
at org.apache.spark.serializer.KryoSerializerInstance.serialize(KryoSerializer.scala:161)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:213)
Cette exception est indiqué après j'ai augmenté le pilote de la mémoire de 3 go et exécuteur testamentaire de la mémoire à 4 go, et augmentation de la taille de la mémoire tampon pour kryoserializer (je suis en utilisant Étincelle 1.3)
conf.set('spark.kryoserializer.buffer.mb', '256')
conf.set('spark.kryoserializer.buffer.max', '512')
Je pense que j'ai mis en mémoire tampon pour être assez grande, mais mon étincelle application crash.
Comment puis-je vérifier quels sont les objets à l'aide de Kryo tampon sur un exécuteur testamentaire?
Est-il moyen de le nettoyer?
- Ressemble le problème est que l'Étincelle 1.3 n'a pas de propriété
spark.kryoserializer.buffer.max
- il aspark.kryoserializer.buffer.max.mb
. Je me suis mise à l'essai dès maintenant l'application, avec le bon ensemble de propriétés. - J'ai un problème similaire, pourriez-vous le résoudre? si oui ... comment?
- a ma réponse vous a aidé à résoudre votre problème?
- vvladymyrov Il n'a pas, je reçois ce problème chaque fois que je lance NaiveBayes s'adapter sur un grand dataset où les fonctions sont dans le formulaire de SparseVectors avec des millions d'entités
Vous devez vous connecter pour publier un commentaire.
Dans mon cas, le problème a été en utilisant le mauvais nom de la propriété pour max, taille de la mémoire tampon.
Jusqu'à l'Étincelle de la version 1.3 le nom de la propriété est
spark.kryoserializer.buffer.max.mb
- il a ".mb
" à la fin. Mais j'ai utilisé le nom de la propriété de Spark 1.4 docs -spark.kryoserializer.buffer.max
.Comme un résultat de l'étincelle application a l'aide de la valeur par défaut est de 64 mo. Et ce n'était pas suffisant pour la quantité de données que j'ai été le traitement.
Après j'ai corrigé le nom de la propriété à
spark.kryoserializer.buffer.max.mb
mon appli a bien fonctionné.Solution est l'installation de
spark.kryoserializer.buffer.max
à1g
dansspark-default.conf
et le redémarrage de l'étincelle servicesCe qui a fonctionné pour moi.
Utilisation
conf.set('spark.kryoserializer.buffer.max.mb', 'val')
pour définirkryoserializer
tampon et de garder à l'espritval
doit être inférieure à 2048 sinon vous aurez une erreur indiquant à nouveau tampon doit être inférieure à 2048Je suis en utilisant étincelle 1.5.2 et j'ai eu le même problème. Réglage
spark.kryoserializer.buffer.max.mb
à 256 fixé.Maintenant
spark.kryoserializer.buffer.max.mb
est obsolèteVous devriez plutôt utiliser: