带有 Spark 和 DataStax 驱动程序错误的嵌入式 Cassandra
Embedded Cassandra with Spark and DataStax Driver Error
我们正在为我们的项目使用以下依赖项。
val cassandraConnector = "com.datastax.spark" %% "spark-cassandra-connector" % "2.0.0"
val sparkSql = "org.apache.spark" % "spark-sql_2.11" % "2.2.0"
val phantomDsl = "com.outworkers" % "phantom-dsl_2.11" % "2.15.5"
val cassandraUnit = "org.cassandraunit" % "cassandra-unit" % "3.3.0.2" % "test"
而运行 测试用例使用命令sbt 编译测试。
我们收到以下错误:-
[error] java.lang.IncompatibleClassChangeError: Class com.datastax.driver.core.DefaultResultSetFuture does not implement the requested interface com.google.common.util.concurrent.ListenableFuture
[error] at com.google.common.util.concurrent.Futures.addCallback(Futures.java:1776)
[error] at com.outworkers.phantom.builder.query.execution.PromiseInterface$$anon.fromGuava(ExactlyOncePromise.scala:56)
[error] at com.outworkers.phantom.builder.query.execution.PromiseInterface$$anon.fromGuava(ExactlyOncePromise.scala:63)
[error] at com.outworkers.phantom.builder.query.execution.GuavaAdapter$class.fromGuava(ExecutableStatements.scala:44)
[error] at com.outworkers.phantom.builder.query.execution.PromiseInterface$$anon.fromGuava(ExactlyOncePromise.scala:39)
[error] at com.outworkers.phantom.builder.query.execution.ExecutableStatements$$anonfun$future.apply(ExecutableStatements.scala:112)
[error] at com.outworkers.phantom.builder.query.execution.ExecutableStatements$$anonfun$future.apply(ExecutableStatements.scala:110)
[error] at scala.collection.immutable.List.foreach(List.scala:381)
[error] at com.outworkers.phantom.builder.query.execution.ExecutableStatements.future(ExecutableStatements.scala:110)
[error] at com.outworkers.phantom.ops.DbOps.truncateAsync(DbOps.scala:104)
[error] at com.outworkers.phantom.ops.DbOps.truncate(DbOps.scala:94)
[error] at com.knoldus.cassandra.CassandraDatabaseCluster$class.afterAll(CassandraDatabaseCluster.scala:29)
[error] at com.knoldus.model.PredicateHashingSuite.afterAll(PredicateHashingSuite.scala:7)
[error] at org.scalatest.BeforeAndAfterAll$$anonfun.apply$mcV$sp(BeforeAndAfterAll.scala:225)
[error] at org.scalatest.Status$$anonfun$withAfterEffect.apply(Status.scala:379)
[error] at org.scalatest.Status$$anonfun$withAfterEffect.apply(Status.scala:375)
[error] at org.scalatest.FailedStatus$.whenCompleted(Status.scala:497)
[error] at org.scalatest.Status$class.withAfterEffect(Status.scala:375)
[error] at org.scalatest.FailedStatus$.withAfterEffect(Status.scala:469)
[error] at org.scalatest.BeforeAndAfterAll$class.run(BeforeAndAfterAll.scala:223)
[error] at com.knoldus.model.PredicateHashingSuite.run(PredicateHashingSuite.scala:7)
[error] at org.scalatest.tools.Framework.org$scalatest$tools$Framework$$runSuite(Framework.scala:314)
[error] at org.scalatest.tools.Framework$ScalaTestTask.execute(Framework.scala:480)
[error] at sbt.TestRunner.runTest(TestFramework.scala:102)
[error] at sbt.TestRunner.run(TestFramework.scala:113)
[error] at sbt.TestFramework$$anon$$anonfun$$lessinit$greater.$anonfun$apply(TestFramework.scala:258)
[error] at sbt.TestFramework$.sbt$TestFramework$$withContextLoader(TestFramework.scala:229)
[error] at sbt.TestFramework$$anon$$anonfun$$lessinit$greater.apply(TestFramework.scala:258)
[error] at sbt.TestFramework$$anon$$anonfun$$lessinit$greater.apply(TestFramework.scala:258)
[error] at sbt.TestFunction.apply(TestFramework.scala:267)
[error] at sbt.Tests$.$anonfun$toTask(Tests.scala:276)
[error] at sbt.std.Transform$$anon.$anonfun$apply(System.scala:44)
[error] at sbt.std.Transform$$anon.work(System.scala:64)
[error] at sbt.Execute.$anonfun$submit(Execute.scala:257)
[error] at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:16)
[error] at sbt.Execute.work(Execute.scala:266)
[error] at sbt.Execute.$anonfun$submit(Execute.scala:257)
[error] at sbt.ConcurrentRestrictions$$anon.$anonfun$submitValid(ConcurrentRestrictions.scala:167)
[error] at sbt.CompletionService$$anon.call(CompletionService.scala:32)
[error] at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[error] at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[error] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[error] at java.lang.Thread.run(Thread.java:748)
是不是依赖有问题?
我们怎样才能摆脱这个错误?
谢谢
这真的很有趣,但它与 phantom 无关,它与 Guava 库依赖性有关,它最终以某种方式与类路径上的内容发生冲突。
简而言之,问题基本上来自二进制文件 incompatibility/exclusion,因此类路径中的 Spark 或其他东西会覆盖 phantom 中的 Guava 版本。
如果你打印出驱逐文件,我可以进一步帮助你。
我们还提供 phantom-sbt
作为 Cassandra 的集成 SBT 插件,我怀疑这是这里的根本原因,以及通过 SBT 的 Docker 集成(仅限专业版功能)。也许可以为 phantom 提交一个 GitHub 问题,一旦我们知道哪些版本发生冲突,我们就可以更轻松地跟进那里。
我们正在为我们的项目使用以下依赖项。
val cassandraConnector = "com.datastax.spark" %% "spark-cassandra-connector" % "2.0.0"
val sparkSql = "org.apache.spark" % "spark-sql_2.11" % "2.2.0"
val phantomDsl = "com.outworkers" % "phantom-dsl_2.11" % "2.15.5"
val cassandraUnit = "org.cassandraunit" % "cassandra-unit" % "3.3.0.2" % "test"
而运行 测试用例使用命令sbt 编译测试。 我们收到以下错误:-
[error] java.lang.IncompatibleClassChangeError: Class com.datastax.driver.core.DefaultResultSetFuture does not implement the requested interface com.google.common.util.concurrent.ListenableFuture
[error] at com.google.common.util.concurrent.Futures.addCallback(Futures.java:1776)
[error] at com.outworkers.phantom.builder.query.execution.PromiseInterface$$anon.fromGuava(ExactlyOncePromise.scala:56)
[error] at com.outworkers.phantom.builder.query.execution.PromiseInterface$$anon.fromGuava(ExactlyOncePromise.scala:63)
[error] at com.outworkers.phantom.builder.query.execution.GuavaAdapter$class.fromGuava(ExecutableStatements.scala:44)
[error] at com.outworkers.phantom.builder.query.execution.PromiseInterface$$anon.fromGuava(ExactlyOncePromise.scala:39)
[error] at com.outworkers.phantom.builder.query.execution.ExecutableStatements$$anonfun$future.apply(ExecutableStatements.scala:112)
[error] at com.outworkers.phantom.builder.query.execution.ExecutableStatements$$anonfun$future.apply(ExecutableStatements.scala:110)
[error] at scala.collection.immutable.List.foreach(List.scala:381)
[error] at com.outworkers.phantom.builder.query.execution.ExecutableStatements.future(ExecutableStatements.scala:110)
[error] at com.outworkers.phantom.ops.DbOps.truncateAsync(DbOps.scala:104)
[error] at com.outworkers.phantom.ops.DbOps.truncate(DbOps.scala:94)
[error] at com.knoldus.cassandra.CassandraDatabaseCluster$class.afterAll(CassandraDatabaseCluster.scala:29)
[error] at com.knoldus.model.PredicateHashingSuite.afterAll(PredicateHashingSuite.scala:7)
[error] at org.scalatest.BeforeAndAfterAll$$anonfun.apply$mcV$sp(BeforeAndAfterAll.scala:225)
[error] at org.scalatest.Status$$anonfun$withAfterEffect.apply(Status.scala:379)
[error] at org.scalatest.Status$$anonfun$withAfterEffect.apply(Status.scala:375)
[error] at org.scalatest.FailedStatus$.whenCompleted(Status.scala:497)
[error] at org.scalatest.Status$class.withAfterEffect(Status.scala:375)
[error] at org.scalatest.FailedStatus$.withAfterEffect(Status.scala:469)
[error] at org.scalatest.BeforeAndAfterAll$class.run(BeforeAndAfterAll.scala:223)
[error] at com.knoldus.model.PredicateHashingSuite.run(PredicateHashingSuite.scala:7)
[error] at org.scalatest.tools.Framework.org$scalatest$tools$Framework$$runSuite(Framework.scala:314)
[error] at org.scalatest.tools.Framework$ScalaTestTask.execute(Framework.scala:480)
[error] at sbt.TestRunner.runTest(TestFramework.scala:102)
[error] at sbt.TestRunner.run(TestFramework.scala:113)
[error] at sbt.TestFramework$$anon$$anonfun$$lessinit$greater.$anonfun$apply(TestFramework.scala:258)
[error] at sbt.TestFramework$.sbt$TestFramework$$withContextLoader(TestFramework.scala:229)
[error] at sbt.TestFramework$$anon$$anonfun$$lessinit$greater.apply(TestFramework.scala:258)
[error] at sbt.TestFramework$$anon$$anonfun$$lessinit$greater.apply(TestFramework.scala:258)
[error] at sbt.TestFunction.apply(TestFramework.scala:267)
[error] at sbt.Tests$.$anonfun$toTask(Tests.scala:276)
[error] at sbt.std.Transform$$anon.$anonfun$apply(System.scala:44)
[error] at sbt.std.Transform$$anon.work(System.scala:64)
[error] at sbt.Execute.$anonfun$submit(Execute.scala:257)
[error] at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:16)
[error] at sbt.Execute.work(Execute.scala:266)
[error] at sbt.Execute.$anonfun$submit(Execute.scala:257)
[error] at sbt.ConcurrentRestrictions$$anon.$anonfun$submitValid(ConcurrentRestrictions.scala:167)
[error] at sbt.CompletionService$$anon.call(CompletionService.scala:32)
[error] at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[error] at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[error] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[error] at java.lang.Thread.run(Thread.java:748)
是不是依赖有问题?
我们怎样才能摆脱这个错误?
谢谢
这真的很有趣,但它与 phantom 无关,它与 Guava 库依赖性有关,它最终以某种方式与类路径上的内容发生冲突。
简而言之,问题基本上来自二进制文件 incompatibility/exclusion,因此类路径中的 Spark 或其他东西会覆盖 phantom 中的 Guava 版本。
如果你打印出驱逐文件,我可以进一步帮助你。
我们还提供 phantom-sbt
作为 Cassandra 的集成 SBT 插件,我怀疑这是这里的根本原因,以及通过 SBT 的 Docker 集成(仅限专业版功能)。也许可以为 phantom 提交一个 GitHub 问题,一旦我们知道哪些版本发生冲突,我们就可以更轻松地跟进那里。