I cherry-picked this commit into my local 1.2 branch. It fixed the problem with setting spark.serializer, but I get a similar problem with spark.closure.serializer
org.apache.spark.SparkException: Failed to register classes with Kryo at org.apache.spark.serializer.KryoSerializer.newKryo(KryoSerializer.scala:100) at org.apache.spark.serializer.KryoSerializerInstance.<init>(KryoSerializer.scala:152) at org.apache.spark.serializer.KryoSerializer.newInstance(KryoSerializer.scala:114) at org.apache.spark.executor.CoarseGrainedExecutorBackend$$anonfun$receiveWithLogging$1.applyOrElse(CoarseGrainedExecutorBackend.scala:73) at scala.runtime.AbstractPartialFunction$mcVL$sp.apply$mcVL$sp(AbstractPartialFunction.scala:33) at scala.runtime.AbstractPartialFunction$mcVL$sp.apply(AbstractPartialFunction.scala:33) at scala.runtime.AbstractPartialFunction$mcVL$sp.apply(AbstractPartialFunction.scala:25) at org.apache.spark.util.ActorLogReceive$$anon$1.apply(ActorLogReceive.scala:53) at org.apache.spark.util.ActorLogReceive$$anon$1.apply(ActorLogReceive.scala:42) at scala.PartialFunction$class.applyOrElse(PartialFunction.scala:118) at org.apache.spark.util.ActorLogReceive$$anon$1.applyOrElse(ActorLogReceive.scala:42) at akka.actor.Actor$class.aroundReceive(Actor.scala:465) at org.apache.spark.executor.CoarseGrainedExecutorBackend.aroundReceive(CoarseGrainedExecutorBackend.scala:36) at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516) at akka.actor.ActorCell.invoke(ActorCell.scala:487) at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:238) at akka.dispatch.Mailbox.run(Mailbox.scala:220) at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:393) at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) Caused by: java.lang.ClassNotFoundException: com.foo.Foo at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:270) at org.apache.spark.serializer.KryoSerializer$$anonfun$newKryo$2.apply(KryoSerializer.scala:93) at org.apache.spark.serializer.KryoSerializer$$anonfun$newKryo$2.apply(KryoSerializer.scala:93) at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33) at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:108) at org.apache.spark.serializer.KryoSerializer.newKryo(KryoSerializer.scala:93) ... 21 more On Mon, May 4, 2015 at 5:43 PM, Akshat Aranya <aara...@gmail.com> wrote: > Actually, after some digging, I did find a JIRA for it: SPARK-5470. > The fix for this has gone into master, but it isn't in 1.2. > > On Mon, May 4, 2015 at 2:47 PM, Imran Rashid <iras...@cloudera.com> wrote: > > Oh, this seems like a real pain. You should file a jira, I didn't see an > > open issue -- if nothing else just to document the issue. > > > > As you've noted, the problem is that the serializer is created > immediately > > in the executors, right when the SparkEnv is created, but the other jars > > aren't downloaded later. I think you could workaround with some > combination > > of pushing the jars to the cluster manually, and then using > > spark.executor.extraClassPath > > > > On Wed, Apr 29, 2015 at 6:42 PM, Akshat Aranya <aara...@gmail.com> > wrote: > >> > >> Hi, > >> > >> Is it possible to register kryo serialization for classes contained in > >> jars that are added with "spark.jars"? In my experiment it doesn't > seem to > >> work, likely because the class registration happens before the jar is > >> shipped to the executor and added to the classloader. Here's the > general > >> idea of what I want to do: > >> > >> val sparkConf = new SparkConf(true) > >> .set("spark.jars", "foo.jar") > >> .setAppName("foo") > >> .set("spark.serializer", > >> "org.apache.spark.serializer.KryoSerializer") > >> > >> // register classes contained in foo.jar > >> sparkConf.registerKryoClasses(Array( > >> classOf[com.foo.Foo], > >> classOf[com.foo.Bar])) > > > > >