我在我们的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/jars具有Gava v14.0.1,并且在执行spark-submit时未考虑Guava v19.0中的spark application jar就会加载该文件。

然后,我在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

谢谢!!!

最佳答案

这是因为spring-data-cassandra使用cassandra java驱动程序。 here中已说明,Cassandra Java驱动程序未包含在内。

就像@RussS所说的那样:


仅使用阴影罐子,这是Spark Cassandra连接器2.0.0-M3中的默认设置
不要在Cassandra Java驱动程序上包括任何依赖项。这样做将重新引入番石榴版本。


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

09-13 13:58