无法使用 spark kryo 序列化

Posted

技术标签:

【中文标题】无法使用 spark kryo 序列化【英文标题】:Unable to use spark kryo serialization 【发布时间】:2017-03-30 14:26:32 【问题描述】:

我无法在 spark-2.0.2 中使用 kryo 序列化程序。在我的 scala 驱动程序代码中,我有。

sparkConf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
parkConf.set("spark.kryoserializer.buffer.max","64m")
parkConf.set("spark.kryoserializer.buffer","64k")

但是,这会产生以下错误:

[Stage 0:> (0 + 1) / 4]17/03/30 10:15:34 ERROR Executor: Exception in task 0.0 in stage 0.0 (TID 0) org.apache.spark.SparkException:Kryo 序列化失败:缓冲区溢出。可用:0,必需:157。为避免这种情况,请增加 spark.kryoserializer.buffer.max 值。

此外,我尝试在 spark-defaults.conf 中设置相同的属性,但出现相同的错误。给出的错误是报告“可用”大小为 0:,似乎我的设置被忽略了。

【问题讨论】:

【参考方案1】:

我现在明白了。 “spark.kryoserializer.buffer.max”必须足够大以接受分区中的所有数据,而不仅仅是一条记录。对于包含 512mb 的 256 字节数组的分区,buffer.max 必须在 768mb 左右。我没有在文档的任何地方看到这一点,并且我的印象是 buffer.max 必须足够大才能接受分区中最大的序列化记录。

【讨论】:

以上是关于无法使用 spark kryo 序列化的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Apache Spark 中向 Kryo Serializer 注册类?

Spark-Kryo序列化框架

Spark---序列化(Kryo)

Spark设置Kryo序列化缓冲区大小

Kryo序列化:Class Not Found的可能原因

kryo的速度测试