使用Spark和Cassandra Java司机检测到Guava问题#1635



我在我们的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 Driver似乎正在寻找Guava版本> 16.0.1,并且由于找到了版本&lt;16.0.1。我确保构建的spark uber jar只有Guava version 19.0。但是当我执行spark-submit时,我仍然会遇到相同的错误。

经过进一步的分析后,我发现spark-2.0.1-bin-hadoop2.7/jars具有Gava 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程序运行(,则可以正常运行。

我发现了类似的问题,但没有找到任何解决方案。让我知道是否有人遇到了同样的问题并为此解决了解决方案。

使用Datastax Enterprise Cassandra 5.x

谢谢!

这是因为弹簧data-cassandra使用Cassandra Java驱动程序。Cassandra Java司机在此处解释。

像@russs一样:

  • 仅使用阴影罐,这是Spark Cassandra Connector 2.0.0-m3
  • 中的默认值
  • 请勿在Cassandra Java驾驶员上包含任何依赖项。这样做将重新引入番石榴版。

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

spark 2.0.1具有guava 14.x jar, cassandra-java-driver需要guava版本> 16.0.1。当我们使用Spark-Submit提交Spark作业时,Spark中的Guava版本覆盖了我们的Spark应用程序JAR中的guava版本,从而导致了有关错误。通过用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

  2. 中,覆盖Spark Guava 14.x Jar
  3. 确保我们的Spark应用程序JAR不包含任何guava依赖关系(也排除了传递依赖项(版本&lt;16.0.1 ...或u可以在pom.xml中包含最新版本,以便该版本将包含在Final Jar/war/p>

相关内容

  • 没有找到相关文章

最新更新