Proszę, pomóż zrozumieć, w jaki sposób serializator Kryo przydziela pamięć dla swojego bufora.Jak serializator Kryo przydziela bufor w Spark
Moja aplikacja Spark kończy się niepowodzeniem na etapie zbierania danych, gdy próbuje zebrać około 122 MB danych do sterownika od pracowników.
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)
Ten wyjątek jest pokazany po tym jak wzrosła pamięci sterownika do 3Gb i pamięci executora do 4GB oraz zwiększenie rozmiaru bufora dla kryoserializer (używam Spark 1.3)
conf.set('spark.kryoserializer.buffer.mb', '256')
conf.set('spark.kryoserializer.buffer.max', '512')
myślę "Ustawiłem bufor na wystarczająco duży, ale moja iskra ciągle się zawiesza. Jak mogę sprawdzić, jakie obiekty używają bufora Kryo na executorze? Czy można to wyczyścić?
Wygląda na to, że Spark 1.3 nie ma własności 'spark.kryoserializer.buffer.max' - ma' spark.kryoserializer.buffer.max.mb'. Testuję teraz aplikację z poprawnym zestawem właściwości. – vvladymyrov
Mam podobny problem, czy możesz go rozwiązać? Jeśli tak to jak? –
@AlbertoBonsanto czy moja odpowiedź pomogła Ci w rozwiązaniu problemu? – vvladymyrov