在星火作业中使用ElasticSearch时番石榴罐子冲突

问题描述 投票:3回答:5

所以我有一段代码,其索引记录到弹性。此代码与火花和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发生,所以我想火花(1.6)也使用番石榴的旧版本,但我找不到在哪里以及如何解决它。我也试图使一个新的jar掩映弹性搜索2.3.1 + com.google.common和使用它,但也没工作

hadoop elasticsearch apache-spark yarn
5个回答
1
投票

问题是既elasticsearch和火花使用番石榴,但不同的版本:ES采用18.0和火花采用14.0。

所以,在你的pom.xml,你可以尝试使用火花排除旧版本:

    <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
投票

我正面临完全一样的问题提交我的工作就是激发群集时。 @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>

0
投票

使用火花提交选项:

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  \
...

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


-2
投票

我有同样的确切问题,我能够加入“番石榴16.0.1.jar”到“--addJars”属性,并通过设置sparkConf.set(“spark.driver.extraClassPath”来解决这个问题,“番石榴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);
© www.soinside.com 2019 - 2024. All rights reserved.