【问题标题】:Spark 1.3 and Cassandra 3.0 problems with guavaSpark 1.3 和 Cassandra 3.0 与番石榴有关的问题
【发布时间】:2016-04-26 07:48:01
【问题描述】:

我正在尝试从 Spark 1.3 连接到 Cassandra 3.0。我知道 spark 中每个版本都有 Cassandra 连接器,但是 spark-cassandra-connector-java_2.10:1.3.0 连接器依赖于cassandra-driver-core:2.1.5,这就是为什么我使用最新的 cassandra 连接器,它依赖于最新的核心驱动程序。无论如何,到目前为止,这不是问题。我想问题是com.google.guava 包。

我的 pom 看起来像这样:

...
<dependency>
   <groupId>com.datastax.spark</groupId>
    <artifactId>spark-cassandra-connector-java_2.10</artifactId>
    <version>1.5.0-M3</version>
</dependency>
<dependency>
    <groupId>com.datastax.spark</groupId>
    <artifactId>spark-cassandra-connector_2.10</artifactId>
    <version>1.5.0-M3</version>
 </dependency>
...

我已经从任何地方排除了谷歌番石榴:

<exclusions>
   <exclusion>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
   </exclusion>
</exclusions>

所以在依赖树中只有 com.google.guava:guava:jar:16.0.1com.datastax.spark:spark-cassandra-connector-java_2.10:jar:1.5.0-M3:compile 下。 但是我仍然收到以下错误:

yarn.ApplicationMaster: User class threw exception: Failed to open native connection to Cassandra at {139.19.52.111}:9042
java.io.IOException: Failed to open native connection to Cassandra at {139.19.52.111}:9042
    at com.datastax.spark.connector.cql.CassandraConnector$.com$datastax$spark$connector$cql$CassandraConnector$$createSession(CassandraConnector.scala:162)
    at com.datastax.spark.connector.cql.CassandraConnector$$anonfun$2.apply(CassandraConnector.scala:148)
    at com.datastax.spark.connector.cql.CassandraConnector$$anonfun$2.apply(CassandraConnector.scala:148)
    at com.datastax.spark.connector.cql.RefCountedCache.createNewValueAndKeys(RefCountedCache.scala:31)
    at com.datastax.spark.connector.cql.RefCountedCache.acquire(RefCountedCache.scala:56)
    at com.datastax.spark.connector.cql.CassandraConnector.openSession(CassandraConnector.scala:81)
    at com.ambiverse.tagging.dao.impl.DAOCassandra.createTable(DAOCassandra.java:45)
    at com.ambiverse.tagging.dao.impl.DAOCassandra.createTable(DAOCassandra.java:64)
    at com.ambiverse.tagging.dao.impl.DAOCassandra.savePairRDD(DAOCassandra.java:70)
    at com.ambiverse.tagging.statistics.entitycorrelation.CorrelationStatisticsSparkRunner.run(CorrelationStatisticsSparkRunner.java:176)
    at com.ambiverse.tagging.statistics.entitycorrelation.CorrelationStatisticsSparkRunner.main(CorrelationStatisticsSparkRunner.java:94)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$2.run(ApplicationMaster.scala:480)
Caused by: java.lang.NoSuchMethodError: com.google.common.util.concurrent.Futures.withFallback(Lcom/google/common/util/concurrent/ListenableFuture;Lcom/google/common/util/concurrent/FutureFallback;Ljava/util/concurrent/Executor;)Lcom/google/common/util/concurrent/ListenableFuture;
    at com.datastax.driver.core.Connection.initAsync(Connection.java:178)
    at com.datastax.driver.core.Connection$Factory.open(Connection.java:742)
    at com.datastax.driver.core.ControlConnection.tryConnect(ControlConnection.java:240)
    at com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:187)
    at com.datastax.driver.core.ControlConnection.connect(ControlConnection.java:79)
    at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:1393)
    at com.datastax.driver.core.Cluster.getMetadata(Cluster.java:402)
    at com.datastax.spark.connector.cql.CassandraConnector$.com$datastax$spark$connector$cql$CassandraConnector$$createSession(CassandraConnector.scala:155)

在有人将我指向这篇博文寻求解决方案之前:http://arjon.es/2015/10/12/making-hadoop-2-dot-6-plus-spark-cassandra-driver-play-nice-together/,我使用 maven 作为构建工具,而不是 sbt。如果你知道我如何用 maven 做同样的事情,那就太好了。

【问题讨论】:

  • 这很奇怪,对我来说,这个错误似乎表明你必须在 classpath 中有一个早于 14.0 的 guava 版本,因为那是在引入 withFallback 时。另一方面,我们在 datastax java-driver 中添加了一些验证,以在检测到旧版本的 guava 时抛出异常......
  • 顺便说一句,如果我从 IDEA 启动 Spark,如何解决?

标签: maven hadoop apache-spark cassandra guava


【解决方案1】:

虽然我使用 scala + sbt,但我在使用 spark 的不同工件之间存在一些不匹配,其中之一是番石榴。

这是我解决它的方法(sbt 中的依赖项):

  val sparkVersion           = "1.6.1"//"2.0.0-preview"//
  val sparkCassandraConnectorVersion = "1.6.0"

  val scalaGuiceVersion = "4.0.1"

  val cassandraUnitVersion = "3.0.0.1"


  val typesafeConfigVersion = "1.3.0"

  val findbugsVersion = "3.0.0"

  val sparkRabbitmqVersion = "0.4.0.20160613"
  val nettyAllVersion = "4.0.33.Final"
  val guavaVersion = "19.0"
  val jacksonVersion = "2.7.4"
  val xbeanAsm5ShadedVersion = "4.5"
  val commonsBeanutilsVersion = "1.8.0"


  //IMPORTANT: all spark dependency magic is done in one place, to overcome the assembly mismatch errors
  val sparkDependencies :List[ModuleID] = List(
    ("org.apache.spark" %% "spark-core" % sparkVersion).exclude("com.esotericsoftware.minlog", "minlog"),
    "org.apache.spark" %% "spark-sql" % sparkVersion,
    "org.apache.spark" %% "spark-streaming" % sparkVersion,
    ("com.datastax.spark" %% "spark-cassandra-connector"
      % sparkCassandraConnectorVersion).exclude("org.apache.cassandra", "cassandra-clientutil"),
    "com.stratio.receiver" % "spark-rabbitmq_1.6" % sparkRabbitmqVersion,//"0.3.0-b", //,//
    "org.scalatest" %% "scalatest" % scalaTestVersion % "test",

    "org.apache.xbean" % "xbean-asm5-shaded" % xbeanAsm5ShadedVersion,//,//, //https://github.com/apache/spark/pull/9512/files

    "io.netty" % "netty-all" % nettyAllVersion,
    "commons-beanutils" % "commons-beanutils" % commonsBeanutilsVersion,
    "com.google.guava" % "guava" % guavaVersion,

    "com.fasterxml.jackson.module" %% "jackson-module-scala" % jacksonVersion,//fix jackson mismatch problem
    "com.fasterxml.jackson.core" % "jackson-databind" % jacksonVersion,//fix jackson mismatch problem


    //override findbugs artifacts versions(fix assembly issues)
    "com.google.code.findbugs" % "annotations" % findbugsVersion,
    "com.google.code.findbugs" % "jsr305" % findbugsVersion
  ).map(_.exclude("commons-collections", "commons-collections"))

我希望它会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-16
    • 2013-08-23
    • 2020-03-10
    • 1970-01-01
    • 2012-04-13
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多