2016-03-28 9 views
1

Ich benutze Guice-Architektur bei der Entwicklung meiner Spark-Streaming-Programm. Es kann ohne Fehler in meiner Sonnenfinsternis laufen. Doch nach dem Kompilieren und Einsatz mit funken vorlegen Befehl, gibt es einen Fehler:Spark Job Deployment Fehler zu Cloudera

java.lang.NoClassDefFoundError: com/google/common/base/Preconditions 

Nach googeln durch, bemerkte ich, dass dieser Fehler erscheint nur, wenn wir guice 3.0 verwenden. Aber ich benutze guice 4.0. Meine Spark-Version ist 1.5.2, und meine Cloudera-Version ist 5.3.2. Gibt es irgendwelche Arbeiten zu diesem Fehler?

Antwort

1

Für Sie ist Spark v1.5.2 von com.google.inject:guice:3.0 abhängig.

So vermute ich, dass das, was passiert ist, dass das Projekt sowohl zieht:

  • Guice 4.0 (als eine direkte Abhängigkeit in Ihren Abhängigkeiten angegeben Datei wie pom.xml oder build.sbt); und
  • Guice 3.0 (eine transitive Abhängigkeit gezogen von Spark v1.5.2)

Grundsätzlich Classpath endet ein Durcheinander zu sein, und je nach Art und Weise Klassen werden von den Klassenlader zur Laufzeit geladen werden Sie (oder nicht) Erfahrung solchen Art von Fehlern.

Sie müssen die bereits provided Version von Guice (gezogen von Spark) oder Jonglieren mit Classloadern verwenden.


UPDATE:

der Tat die org.apache.spark:spark-core_2.10:1.5.2 zieht com.google.inject:guice:3.0:

+-org.apache.spark:spark-core_2.10:1.5.2 [S] 
    + ... 
... 
    +-org.apache.hadoop:hadoop-client:2.2.0 
    | +-org.apache.hadoop:hadoop-mapreduce-client-app:2.2.0 
    | | +-com.google.protobuf:protobuf-java:2.5.0 
    | | +-org.apache.hadoop:hadoop-mapreduce-client-common:2.2.0 
    | | | +-com.google.protobuf:protobuf-java:2.5.0 
    | | | +-org.apache.hadoop:hadoop-mapreduce-client-core:2.2.0 
    | | | | +-com.google.protobuf:protobuf-java:2.5.0 
    | | | | +-org.apache.hadoop:hadoop-yarn-common:2.2.0 (VIA PARENT org.apache.hadoop:hadoop-yarn:2.2.0 and then VIA ITS PARENT org.apache.hadoop:hadoop-project:2.2.0) 
    | | | | | +-com.google.inject:guice:3.0 
... 

Die spark-corepom.xml ist here.

Die hadoop-yarn-commonpom.xml ist here.

Die hadoop-yarnpom.xml ist here.

Die hadoop-projectpom.xml ist here.

+0

Haben Sie eine Referenz für die pom.xml? Ich vermute, dass mein Klassenpfad in Unordnung ist. –

+0

Lol Ich kann keine pom.xml finden, die auf die richtige Eingabe selbst angewiesen ist, es ist peinlich. Wenn ich jedoch ein Fettglas mit "spark-core" v1.5.2 als Abhängigkeit erzeuge, kann ich sehen, dass Guice 3.0 enthalten ist (warum ich zu der vorherigen Schlussfolgerung kam). Ich werde zu Ihnen zurückkommen, sobald ich mehr Informationen habe und ich verstehe, warum es passiert. – mauriciojost

+0

http://stackoverflow.com/questions/36320695/guice-dependency-is-transitively-pulled-without-explicit-dependency – mauriciojost