2016-05-09 3 views
3

so habe ich ein Stück Code, der Datensätze in elastisch aufzeichnet. Dieser Code läuft mit Funke und Hadoop. Ich habe gerade Elasticsearch auf 2.3.1 aktualisiert. Wenn ich meinen Code auf dem lokalen Computer ausführen, funktioniert es großartig. Wenn ich versuche es mit dem Funken einreichen Job ausgeführt werden soll, ich bin immerGuava-Jar-Konflikt bei der Verwendung von ElasticSearch auf Spark-Job

java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.directExecutor()Ljava/util/concurrent/Executor;

Nach Google-Suche, wurde mir klar, das Problem mit Guave ist, so in meinem pom.xml nur ich die

setzen

com.google.guava guava 19.0 unter der Abhängigkeitsverwaltung.

aber der Fehler immer noch passieren, so denke ich, Funken (1.6) ist auch mit einer älteren Version von Guave, aber ich kann nicht finden, wo und wie es zu lösen ... Ich habe auch versucht, ein neues Glas zu machen welche Schatten elastic-search 2.3.1 + com.google.common und verwenden Sie es, aber hat auch nicht funktioniert

+1

Funke 1.6 Guave 14.0.1 verwendet. Checkout diesen Blog-Post: https://www.elastic.co/blog/to-shade-or-not-to-shade – alpert

+0

Sie können es mit Guava '18.0' in Ihrem' pom.xml' – avr

Antwort

1

Das Problem ist sowohl elasticsearch und Funken verwendet Guava, sondern verschiedene Versionen: es verwendet 18.0 und Funken verwendet 14,0.

Also in Ihrem pom.xml können Sie versuchen, die alte Version auszuschließen, dass Funken verwendet:

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

Oder verwendet Methoden, die in diesem Blog-Beitrag beschrieben: https://www.elastic.co/blog/to-shade-or-not-to-shade

+0

die Schattierung Teil war zu lösen hilfreich, danke –

-1

hatte ich exakt das gleiche Problem und ich konnte das lösen, indem ich "guava-16.0.1.jar" zur Eigenschaft "--addJars" hinzufüge und sparkConf.set ("spark.driver.extraClassPath", "guava-16.0.1.jar") setzte); Da die Einträge "spark.driver.extraClassPath" dem Klassenpfad des Treibers vorangestellt sind, überschreibt Ihre hochgeladene Datei guava.jar die Guava.jar des Hadoops.

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); 
0

Funken einreichen Optionen:

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