所以我有一段代码将记录索引为弹性。此代码使用spark和hadoop运行。 我刚刚将Elasticsearch升级到2.3.1。 当我在本地计算机上运行我的代码时,它运行良好。 当我试图用火花提交工作运行它时,我正在
java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.directExecutor()Ljava / util的/并行/执行器;
搜索谷歌后,我意识到问题出在番石榴上,所以在我的pom.xml中我只是把
com.google.guava 番石榴 19.0 在dependencyManagement下。
但是错误stil发生了,所以我猜spark(1.6)也使用旧版本的番石榴,但我无法找到解决问题的地方和方法...... 我还尝试制作一个新的jar,它使用弹性搜索2.3.1 + com.google.common并使用它,但也没有工作
答案 0 :(得分:1)
问题是elasticsearch和spark都使用番石榴但是版本不同:es使用18.0而spark使用14.0。
因此,在您的pom.xml中,您可以尝试排除spark使用的旧版本:
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core</artifactId>
<version>1.6.0</version>
<exclusions>
<exclusion>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</exclusion>
</exclusions>
</dependency>
或使用该博客文章中描述的方法:https://www.elastic.co/blog/to-shade-or-not-to-shade
答案 1 :(得分:1)
将工作提交到Spark Cluster时,我面临着完全相同的问题。 @alpert第二个解决方案为我工作。我使用弹性搜索2.4.0客户端作为依存关系,所以我找到了2.4.0的替代阴影罐:
<!-- https://mvnrepository.com/artifact/org.elasticsearch/elasticsearch -->
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>2.4.0-atlassian-shaded-1</version>
</dependency>
答案 2 :(得分:0)
使用spark-submit选项:
spark-submit --jars path_to/guava-18.0.jar,.. \
--conf spark.driver.extraClassPath=guava-18.0.jar \
--conf spark.executor.extraClassPath=guava-18.0.jar \
...
答案 3 :(得分:0)
在How to resolve the conflict between 11.0.2 and 16.0 of guava when using yarn, spark and spark-cassandra-connector?中提出的解决方案运行良好。您只需要将spark.driver.userClassPathFirst
的值设置为true
。
答案 4 :(得分:-2)
我有同样的问题,我可以通过将“guava-16.0.1.jar”添加到“--addJars”属性并通过设置来解决这个问题 sparkConf.set(“spark.driver.extraClassPath”,“guava-16.0.1.jar”); 由于“spark.driver.extraClassPath”条目将添加到驱动程序的类路径中,因此上传的guava.jar将覆盖hadoop的guava.jar。
SparkConf sparkConf = new SparkConf().setAppName("YarnResource").setMaster("yarn-cluster").set("spark.driver.extraClassPath", "guava-16.0.1.jar");
List<String> argList = new ArrayList<>();
int argIndex = 0;
argList.add(argIndex++, "--addJars");
argList.add(argIndex++, "/home/myuser/myapp/lib/guava-16.0.1.jar");
String[] sparkArgArray = argList.toArray(new String[argList.size()]);
ClientArguments cArgs = new ClientArguments(sparkArgArray, sparkConf);
// create an instance of yarn Client client
Client client = new Client(cArgs, hadoopConfig, sparkConf);