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]))
> >
> >
>

Reply via email to