gpt4 book ai didi

apache-spark - Kryo序列化器如何在Spark中分配缓冲区

转载 作者:行者123 更新时间:2023-12-04 02:01:51 24 4
gpt4 key购买 nike

请帮助了解Kryo串行器如何为其缓冲区分配内存。

当我的Spark应用程序尝试从工作人员向驱动程序收集大约122Mb的数据时,在收集步骤失败。

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)


当我将驱动程序内存增加到3Gb,将执行程序内存增加到4Gb,并且为kryoserializer增加了缓冲区大小后,就会显示此异常(我使用的是Spark 1.3)

conf.set('spark.kryoserializer.buffer.mb', '256')
conf.set('spark.kryoserializer.buffer.max', '512')


我认为我已经设置了足够大的缓冲区,但是我的spark应用程序一直崩溃。
如何检查执行程序上使用Kryo缓冲区的对象?
有办法清理吗?

最佳答案

就我而言,问题是最大缓冲区大小使用了错误的属性名称。

Up to Spark version 1.3属性名称为spark.kryoserializer.buffer.max.mb-它的末尾有“ .mb”。但是我使用了Spark 1.4 docs-spark.kryoserializer.buffer.max的属性名称。

结果,spark应用程序使用的是默认值-64mb。而且这还不足以处理我正在处理的数据量。

将属性名称固定为spark.kryoserializer.buffer.max.mb后,我的应用程序运行正常。

关于apache-spark - Kryo序列化器如何在Spark中分配缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31947335/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com