【问题标题】:Detected Guava issue #1635 when using Spark and Cassandra Java Driver使用 Spark 和 Cassandra Java 驱动程序时检测到 Guava 问题 #1635
【发布时间】:2017-09-25 12:24:00
【问题描述】:

我在我们的 spark 应用程序中使用spring-data-cassandra 1.5.1(它使用cassandra java driver 3.x)。运行spark-submit 命令时,出现以下错误。

Caused by: java.lang.IllegalStateException: Detected Guava issue #1635 which indicates that a version of Guava less than 16.01 is in use.  This introduces codec resolution issues and potentially other incompatibility issues in the driver.  Please upgrade to Guava 16.01 or later.
    at com.datastax.driver.core.SanityChecks.checkGuava(SanityChecks.java:62)
    at com.datastax.driver.core.SanityChecks.check(SanityChecks.java:36)
    at com.datastax.driver.core.Cluster.<clinit>(Cluster.java:68)
    ... 71 more

似乎 cassandra 驱动程序正在寻找 Guava 版本 > 16.0.1 并且它失败了,因为它找到了版本 spark uber jar 只有Guava version 19.0。但是当我执行spark-submit 时仍然出现同样的错误。

经过进一步分析,我发现spark-2.0.1-bin-hadoop2.7/jarsGava v14.0.1,并且当我执行spark-submit 时不考虑spark application jar 中的Guava v19.0,它正在加载。

然后我在spark-2.0.1-bin-hadoop2.7/jars 中用 v19.0 替换了 v14.0.1,现在我没有收到任何错误,应用程序运行正常。但我认为这不是一个好方法,不想在prod 中这样做。

如果我在 eclipse 中运行相同的 spark 作业(通过在代码中设置 conf master=local 并作为 Java 程序运行)它工作正常。

我在 SO 中发现了类似的问题,但没有找到任何解决方案。如果有人遇到同样的问题并对此有解决方案,请告诉我。

使用Datastax Enterprise Cassandra 5.x

谢谢!!!

【问题讨论】:

    标签: java apache-spark guava datastax-enterprise spring-data-cassandra


    【解决方案1】:

    这是因为 spring-data-cassandra 使用了 cassandra java 驱动。正如here 所解释的那样,Cassandra java 驱动程序并未包含在内。

    就像@RussS 所说的那样:

    • 仅使用带阴影的 jar,这是 Spark Cassandra 连接器 2.0.0-M3 中的默认设置
    • 不要包含对 Cassandra Java 驱动程序的任何依赖项。这样做会重新引入 guava 版本。

    https://github.com/datastax/spark-cassandra-connector/blob/master/doc/FAQ.md#how-do-i-fix-guava-classpath-errors

    【讨论】:

      【解决方案2】:

      Spark 2.0.1 有 Guava 14.x jar,cassandra-java-driver 需要 Guava 版本 > 16.0.1。当我们使用 spark-submit 提交 spark 作业时,spark 中的 guava 版本会覆盖我们的 spark 应用程序 jar 中的版本,从而导致出现问题。通过用guava 19.0.jar 覆盖spark guava 14.x jar 解决了这个问题

      1. 通过在 spark 提交命令 --conf spark.driver.extraClassPath=/path/to/guava-19.0.jar --conf spark.executor.extraClassPath=/path/to/guava-19.0.jar 中传递下面的配置来覆盖 spark guava 14.x jar

      2. 确保我们的 spark 应用程序 jar 不包含任何 guava 依赖项(也排除传递依赖项)版本

      【讨论】:

      • 谢谢,Omkar。我在 AWS EMR (emr-6.3.0) 中使用 spark 3.1.1 并遇到了这个问题。 Hadoop 库带来了旧的番石榴 v14 罐子。在类路径开头添加 guava v19 jar 帮助我启动了 cassandra 核心 java 驱动程序。
      猜你喜欢
      • 2020-02-01
      • 2013-09-09
      • 2022-09-02
      • 2016-10-02
      • 1970-01-01
      • 1970-01-01
      • 2016-12-31
      • 1970-01-01
      • 2019-08-01
      相关资源
      最近更新 更多