spark kryoserializer buffer overflow:conf not not set

时间:2018-04-03 04:02:49

标签: scala apache-spark

我面临着在其他几个问题中遇到的同样的一般性问题,但所有这些问题中提出的决议对我来说都不起作用。此外,它是一个不同的问题,在我从Spark Shell中设置后,我甚至看不到kryo值。

设置属性:

conf.set("spark.kryoserializer.buffer.max","2048") res1: org.apache.spark.SparkConf = org.apache.spark.SparkConf@463c5d0f

试图查看已设置的值: spark.sqlContext.getAllConfs.get("spark.kryoserializer.buffer.max") res2: Option[String] = None

不知道为什么我现在无法看到我在那里设定的价值。

另外,如果我执行getAll属性列表,我会得到: spark.sqlContext.getAllConfs

scala.collection.immutable.Map[String,String] = Map(spark.port.maxRetries -> 20, spark.serializer -> org.apache.spark.serializer.KryoSerializer, spark.sql.warehouse.dir -> /user/hive/warehouse, spark.yarn.jars -> local:/opt/cloudera/parcels/SPARK2-2.2.0.cloudera1-1.cdh5.12.0.p0.142354/lib/spark2/jars/*, ...

有人能告诉我这里的问题是什么吗?不确定我是否做错了设置属性。

Spark版本:2.2.0

1 个答案:

答案 0 :(得分:0)

似乎不允许它是2048.通过spark-shell得到以下错误:

$ bin/spark-shell --conf spark.kryoserializer.buffer.max=2048
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
18/04/03 19:33:03 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
18/04/03 19:33:03 ERROR SparkContext: Error initializing SparkContext.
java.lang.IllegalArgumentException: spark.kryoserializer.buffer.max must be less than 2048 mb, got: + 2048 mb.
    at org.apache.spark.serializer.KryoSerializer.<init>(KryoSerializer.scala:68)

所以,在你的情况下,它似乎被默默地忽略了。 当我设置为较小的值时,它反映:

scala> sc.getConf.set("spark.kryoserializer.buffer.max","1024")
res3: org.apache.spark.SparkConf = org.apache.spark.SparkConf@7d8d671b
scala> spark.sqlContext.getConf("spark.kryoserializer.buffer.max")
res5: String = 1024

来自spark config docs

  

spark.kryoserializer.buffer.max
  Kryo的最大允许尺寸   序列化缓冲区,在MiB中,除非另有说明。这一定是   大于您尝试序列化的任何对象,且必须小于   2048米。如果出现“超出缓冲区限制”异常,请增加此值   在Kryo里面。