scala - 了解 Kryo 序列化缓冲区溢出错误

标签 scala apache-spark kryo

我正在尝试了解以下错误,并且正在客户端 ode 中运行。

 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 上,所以我相信这将在主服务器上运行)?
我应该看看 spark.driver.memory ?

最佳答案

不,问题在于 kryo 的缓冲区中没有足够的空间。你应该调整 spark.kryoserializer.buffer.max在您的属性文件中,或使用 --conf "spark.kryoserializer.buffer.max=128m"在您的 spark-submit 命令中。 128m对你来说应该足够大了。

关于scala - 了解 Kryo 序列化缓冲区溢出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49594778/

相关文章:

scala - 如何在 slick 中做 "OR"过滤器

java - 在 Kryonet 中增加服务器/客户端的缓冲区大小

scala - Cake Pattern 中显式类型的自引用的用处

json - 用 1 个元素解析 Json 列表(Scala/liftweb)

scala - 无法在 Redshift 中保存数据框

scala - 基于现有列在 DataFrame 中添加新列

scala - 如何用Spark写程序替换word

python - 在 Pyspark SQL 中,您需要在哪里使用 lit()?

java - 为什么即使没有无参数构造函数,我也无法序列化对象,即使它实现了 Serialized?

java - 如何使用接口(interface)使用 Kryo 序列化/反序列化对象