spark/cassandra阴影依赖问题

igsr9ssn  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(323)

我在试着把星火的数据流传送到Cassandra。我正在用sbt构建一个fat jar,其中包括以下组件着色规则:

assemblyShadeRules in assembly := Seq(
  ShadeRule.rename("com.google.common.**" -> "shaded.google.common.@1").inAll
)

之所以这样做,是因为spark的guava版本与某些cassandra库所需的版本不同。
但是,尝试在executor中流式处理sstables时,我看到以下错误:

java.lang.NoSuchMethodError: shaded.google.common.util.concurrent.Futures.addCallback(Lshaded/google/common/util/concurrent/ListenableFuture;Lshaded/google/common/util/concurrent/FutureCallback;)V
    at org.apache.cassandra.streaming.StreamResultFuture.addEventListener(StreamResultFuture.java:143)
    at org.apache.cassandra.streaming.StreamManager.register(StreamManager.java:126)
    at org.apache.cassandra.streaming.StreamResultFuture.createAndRegister(StreamResultFuture.java:130)
    at org.apache.cassandra.streaming.StreamResultFuture.init(StreamResultFuture.java:83)
    at org.apache.cassandra.streaming.StreamPlan.execute(StreamPlan.java:190)
    at org.apache.cassandra.io.sstable.SSTableLoader.stream(SSTableLoader.java:169)
    at org.apache.cassandra.io.sstable.SSTableLoader.stream(SSTableLoader.java:154)
    ...

这让我很困惑,因为它显然找不到阴影类。但是我使用 --jars 选项。
你知道在这里试什么吗?

kmbjn2e3

kmbjn2e31#

问题是我的项目在可传递依赖中包含了几个不同版本的guava。sbt选择了与cassandra不兼容的最新版本。
我的解决方案是用cassandra+shaded guava构建一个单独的胖jar,并在运行时包含这个jar。

相关问题