2016-03-16 71 views
1

我有一段星火代码,在星火1.3的工作,但是当我将它移动到星火1.5.2(集群升级了我的控制)失败。故障如下:星火KRYO序列化失败

Caused by: java.io.NotSerializableException: com.location.model.Profile 
Serialization stack: 
    - object not serializable (class: com.location.model.Profile, value: [email protected]) 
    - field (class: org.apache.spark.rdd.PairRDDFunctions$$anonfun$aggregateByKey$1, name: zeroValue$3, type: class java.lang.Object) 
    - object (class org.apache.spark.rdd.PairRDDFunctions$$anonfun$aggregateByKey$1, <function0>) 
    - field (class: org.apache.spark.rdd.PairRDDFunctions$$anonfun$aggregateByKey$1$$anonfun$1, name: $outer, type: class org.apache.spark.rdd.PairRDDFunctions$$anonfun$aggregateByKey$1) 
    - object (class org.apache.spark.rdd.PairRDDFunctions$$anonfun$aggregateByKey$1$$anonfun$1, <function0>) 
    - field (class: org.apache.spark.rdd.PairRDDFunctions$$anonfun$aggregateByKey$1$$anonfun$apply$10, name: createZero$1, type: interface scala.Function0) 
    - object (class org.apache.spark.rdd.PairRDDFunctions$$anonfun$aggregateByKey$1$$anonfun$apply$10, <function1>) 
    at org.apache.spark.serializer.SerializationDebugger$.improveException(SerializationDebugger.scala:40) 
    at org.apache.spark.serializer.JavaSerializationStream.writeObject(JavaSerializer.scala:47) 
    at org.apache.spark.serializer.JavaSerializerInstance.serialize(JavaSerializer.scala:84) 
    at org.apache.spark.util.ClosureCleaner$.ensureSerializable(ClosureCleaner.scala:301) 

有趣的部分是,在手,Profile类,被声明为class Profile() extends KryoSerializable和覆盖该接口的读/写方法。

我还设置这个配置的火花提交:"--conf" -> "'spark.serializer=org.apache.spark.serializer.KryoSerializer'"和因此,所有根据在Spark Tunning guide指令做conf.registerKryoClasses(Array( classOf[Profile], ...

注册Profile类KRYO,和它之前很好的工作。 注意,除了显示JavaSerializerInstance正在使用的ClosureCleaner,而事实上如果我添加extends SerializableProfile类它的工作原理。但我不确定它为什么使用该序列化器,也不知道为什么我应该与Java序列化兼容,如果我特别要求Kryo。


编辑:我甚至完全除去参数,因为registerKryoClasses下代码设置在任何情况下的特性。事实上,我怀疑正在使用KRYO序列化(我加了一个println内write和它的出现,但某种先前确认的是不正确的)。

回答

0

你试过从删除'您的提交,恕我直言,它应该是

--conf‘spark.serializer = org.apache.spark.serializer.KryoSerializer’

你从路易吉通过提交任何机会?

+0

是的,我有。我编辑了这个问题来反映这一点。 –

+0

我在问关于包装你的conf参数的removig单引号,而不是完全删除它 –

+0

同样的效果,你基本上说明是否正确设置了配置。 –