了解 Kryo 序列化缓冲区溢出错误
Understanding Kryo serialization buffer overflow error
我正在尝试理解以下错误,我在客户端模式中 运行。
org.apache.spark.SparkException: Kryo serialization failed: Buffer overflow. Available: 0, required: 61186304. To avoid this, increase spark.kryoserializer.buffer.max value.
at org.apache.spark.serializer.KryoSerializerInstance.serialize(KryoSerializer.scala:300)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:313)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
基本上我是想缩小问题的范围。
我的理解是否正确,这个错误发生在 spark 驱动程序端(我在 aws emr 上所以我相信这将是 运行 在 master 上)?
我应该看看 spark.driver.memory
?
不,问题是 kryo 的缓冲区没有足够的空间。您应该在属性文件中调整 spark.kryoserializer.buffer.max
,或者在您的 spark-submit 命令中使用 --conf "spark.kryoserializer.buffer.max=128m"
。 128m应该够你用了
我正在尝试理解以下错误,我在客户端模式中 运行。
org.apache.spark.SparkException: Kryo serialization failed: Buffer overflow. Available: 0, required: 61186304. To avoid this, increase spark.kryoserializer.buffer.max value.
at org.apache.spark.serializer.KryoSerializerInstance.serialize(KryoSerializer.scala:300)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:313)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
基本上我是想缩小问题的范围。
我的理解是否正确,这个错误发生在 spark 驱动程序端(我在 aws emr 上所以我相信这将是 运行 在 master 上)?
我应该看看 spark.driver.memory
?
不,问题是 kryo 的缓冲区没有足够的空间。您应该在属性文件中调整 spark.kryoserializer.buffer.max
,或者在您的 spark-submit 命令中使用 --conf "spark.kryoserializer.buffer.max=128m"
。 128m应该够你用了