我在我们的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来解决该问题通过传递以下配置在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确保我们的Spark应用程序JAR不包含任何guava依赖关系(也排除了传递依赖项(版本&lt;16.0.1 ...或u可以在pom.xml中包含最新版本,以便该版本将包含在Final Jar/war/p>
中