我面临着在其他几个问题中遇到的同样的一般性问题,但所有这些问题中提出的决议对我来说都不起作用。此外,它是一个不同的问题,在我从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
答案 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里面。