Wie Kryo-Serialisierung stellt Puffer in Spark
Bitte helfen zu verstehen, wie Kryo-Serialisierungsprogramm reserviert Speicher für den Puffer.
Meine Spark-app nicht auf einem sammeln Schritt, wenn er versucht zu sammeln über 122Mb von Daten zu einem Treiber von Arbeitnehmern.
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)
Diese Ausnahme wird angezeigt, nachdem ich erhöht habe der Fahrer den Speicher auf 3Gb und Testamentsvollstrecker Speicher um 4Gb und erhöht Puffergröße für kryoserializer (ich bin mit der Funke 1.3)
conf.set('spark.kryoserializer.buffer.mb', '256')
conf.set('spark.kryoserializer.buffer.max', '512')
Ich denke, ich habe eingestellt, Puffer groß genug sein, aber mein spark app stürzt immer ab.
Wie kann ich überprüfen, welche Objekte werden mithilfe von Kryo-Puffer auf ein Testamentsvollstrecker?
Ist es Weg, um es zu säubern?
spark.kryoserializer.buffer.max
- es hat spark.kryoserializer.buffer.max.mb
. Ich Teste die app jetzt mit der richtigen Eigenschaft festgelegt.Ich habe ein ähnliches problem, konntest du es lösen? wenn ja ... wie?
habe meine Antwort Ihnen geholfen, mit Ihrem Problem?
vvladymyrov Es nicht, ich bekomme dieses problem jedes mal, wenn ich laufen NaiveBayes passen auf ein großes dataset, in dem die Funktionen sind in form von SparseVectors mit Millionen von features
InformationsquelleAutor vvladymyrov | 2015-08-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
In meinem Fall war das problem mit der falschen Eigenschaft name für die max buffer-Größe.
Bis zu Spark version 1.3 der name der Eigenschaft ist
spark.kryoserializer.buffer.max.mb
- es hat ".mb
" am Ende. Aber ich habe den Namen der Eigenschaft aus Spark 1.4 docs -spark.kryoserializer.buffer.max
.Als Ergebnis spark-app wurde mit der default - Wert- 64mb. Und es war nicht genug für die Menge an Daten, die ich verarbeitet wurde.
Nachdem ich Feste die Eigenschaft name zu
spark.kryoserializer.buffer.max.mb
meine app funktioniert gut.InformationsquelleAutor vvladymyrov
Lösung, um das setup
spark.kryoserializer.buffer.max
zu1g
imspark-default.conf
und Neustart spark-servicesZumindest für mich gearbeitet.
InformationsquelleAutor lambzee
Verwenden
conf.set('spark.kryoserializer.buffer.max.mb', 'val')
zu setzenkryoserializer
Puffer und halten Sie im Verstandval
sollte weniger als 2048 ansonsten erhalten Sie eine Fehlermeldung, die angibt Puffer sollte weniger als 2048MBInformationsquelleAutor dnivog
Bin ich mit spark 1.5.2 und ich hatte das gleiche Problem. Einstellung
spark.kryoserializer.buffer.max.mb
zu 256 festen.InformationsquelleAutor Mayukh
Nun
spark.kryoserializer.buffer.max.mb
ist veraltetSollte man eher verwenden:
InformationsquelleAutor Ignacio Alorre