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 a spark.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
InformationsquelleAutor vvladymyrov | 2015-08-11