所以我有一段代码,可以将记录索引到弹性体中。这段代码是用spark和hadoop运行的。我刚把elasticsearch升级到2.3.1。当我在本地机器上运行我的代码时,它工作得很好。当我试图用spark提交作业运行它时,我
java.lang.nosuchmethoderror:com.google.common.util.concurrent.moreexecutors.directexecutor()ljava/util/concurrent/executor;
在搜索了google之后,我意识到问题出在Guava上,所以在pom.xml中我把
com.google.guava guava 19.0下的dependencymanagement。
但是这个错误仍然会发生,所以我猜spark(1.6)也在使用一个旧版本的guava,但是我找不到解决它的地方和方法。。。我还试着做了一个新的jar,用它来搜索2.3.1+com.google.common,但是也没用
5条答案
按热度按时间pnwntuvh1#
在向spark cluster提交工作时,我面临着完全相同的问题@阿尔伯特第二个解决方案对我有用。我使用elastic search 2.4.0客户端作为依赖项,因此我找到了2.4.0的替代着色jar:
tpgth1q72#
在使用Yarn、Spark和SparkCassandra连接器时,如何解决Guava11.0.2和16.0之间的冲突?工作正常。你只需要设置
spark.driver.userClassPathFirst
至true
.vecaoik13#
使用spark提交选项:
gopyfrb34#
我也遇到了同样的问题,我可以通过将“guava-16.0.1.jar”添加到“--addjars”属性并设置sparkconf.set(“spark.driver.extraclasspath”,“guava-16.0.1.jar”)来解决这个问题;因为“spark.driver.extraclasspath”条目将在驱动程序的类路径之前,所以您上传的guava.jar将覆盖hadoop的guava.jar。
0s7z1bwu5#
问题是elasticsearch和spark都使用guava,但版本不同:es使用18.0,spark使用14.0。
因此,在pom.xml中,您可以尝试排除spark使用的旧版本:
或者使用博客文章中描述的方法:https://www.elastic.co/blog/to-shade-or-not-to-shade