Hi Cody,

I'm still writing a test to make sure I understood exactly what's
going on here, but from looking at the stack trace, it seems like the
newer Guava library is picking up the "Optional" class from the Spark
assembly.

Could you try one of the options that put the user's classpath before
the Spark assembly? (spark.files.userClassPathFirst or
spark.yarn.user.classpath.first depending on which master you're
running)

People seem to have run into issues with those options in the past,
but if they work for you, then Guava should pick its own Optional
class (instead of the one shipped with Spark) and things should then
work.

I'll investigate a way to fix it in Spark in the meantime.


On Fri, Sep 19, 2014 at 10:30 PM, Cody Koeninger <c...@koeninger.org> wrote:
> After the recent spark project changes to guava shading, I'm seeing issues
> with the datastax spark cassandra connector (which depends on guava 15.0)
> and the datastax cql driver (which depends on guava 16.0.1)
>
> Building an assembly for a job (with spark marked as provided) that
> includes either guava 15.0 or 16.0.1, results in errors like the following:
>
> scala> session.close
>
> scala> s[14/09/20 04:56:35 ERROR Futures$CombinedFuture: input future
> failed.
> java.lang.IllegalAccessError: tried to access class
> org.spark-project.guava.common.base.Absent from class
> com.google.common.base.Optional
>         at com.google.common.base.Optional.absent(Optional.java:79)
>         at com.google.common.base.Optional.fromNullable(Optional.java:94)
>         at
> com.google.common.util.concurrent.Futures$CombinedFuture.setOneValue(Futures.java:1608)
>         at
> com.google.common.util.concurrent.Futures$CombinedFuture.access$400(Futures.java:1470)
>         at
> com.google.common.util.concurrent.Futures$CombinedFuture$2.run(Futures.java:1548)
>         at
> com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors.java:297)
>         at
> com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)
>         at
> com.google.common.util.concurrent.ExecutionList.add(ExecutionList.java:101)
>         at
> com.google.common.util.concurrent.AbstractFuture.addListener(AbstractFuture.java:170)
>         at
> com.google.common.util.concurrent.Futures$CombinedFuture.init(Futures.java:1545)
>         at
> com.google.common.util.concurrent.Futures$CombinedFuture.<init>(Futures.java:1491)
>         at
> com.google.common.util.concurrent.Futures.listFuture(Futures.java:1640)
>         at
> com.google.common.util.concurrent.Futures.allAsList(Futures.java:983)
>         at
> com.datastax.driver.core.CloseFuture$Forwarding.<init>(CloseFuture.java:73)
>         at
> com.datastax.driver.core.HostConnectionPool.closeAsync(HostConnectionPool.java:398)
>         at
> com.datastax.driver.core.SessionManager.closeAsync(SessionManager.java:157)
>         at
> com.datastax.driver.core.SessionManager.close(SessionManager.java:172)
>         at
> com.datastax.spark.connector.cql.CassandraConnector$.com$datastax$spark$connector$cql$CassandraConnector$$destroySession(CassandraConnector.scala:180)
>         at
> com.datastax.spark.connector.cql.CassandraConnector$$anonfun$5.apply(CassandraConnector.scala:151)
>         at
> com.datastax.spark.connector.cql.CassandraConnector$$anonfun$5.apply(CassandraConnector.scala:151)
>         at com.datastax.spark.connector.cql.RefCountedCache.com
> $datastax$spark$connector$cql$RefCountedCache$$releaseImmediately(RefCountedCache.scala:86)
>         at
> com.datastax.spark.connector.cql.RefCountedCache$ReleaseTask.run(RefCountedCache.scala:26)
>         at
> com.datastax.spark.connector.cql.RefCountedCache$$anonfun$com$datastax$spark$connector$cql$RefCountedCache$$processPendingReleases$2.apply(RefCountedCache.scala:150)
>         at
> com.datastax.spark.connector.cql.RefCountedCache$$anonfun$com$datastax$spark$connector$cql$RefCountedCache$$processPendingReleases$2.apply(RefCountedCache.scala:147)
>         at
> scala.collection.TraversableLike$WithFilter$$anonfun$foreach$1.apply(TraversableLike.scala:772)
>         at scala.collection.Iterator$class.foreach(Iterator.scala:727)
>         at
> scala.collection.concurrent.TrieMapIterator.foreach(TrieMap.scala:922)
>         at
> scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
>         at scala.collection.concurrent.TrieMap.foreach(TrieMap.scala:632)
>         at
> scala.collection.TraversableLike$WithFilter.foreach(TraversableLike.scala:771)
>         at com.datastax.spark.connector.cql.RefCountedCache.com
> $datastax$spark$connector$cql$RefCountedCache$$processPendingReleases(RefCountedCache.scala:147)
>         at
> com.datastax.spark.connector.cql.RefCountedCache$$anon$1.run(RefCountedCache.scala:157)
>         at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
>         at
> java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:351)
>         at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:178)
>         at
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178)
>         at
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
>         at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>         at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>         at java.lang.Thread.run(Thread.java:722)



-- 
Marcelo

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@spark.apache.org
For additional commands, e-mail: dev-h...@spark.apache.org

Reply via email to