2016-04-05 5 views
5

Ich versuche, kleine Funken Anwendung und ich erhalte die folgende Ausnahme auszuführen:IllegalAccessError zu Guave die Stoppuhr von org.apache.hadoop.mapreduce.lib.input.FileInputFormat.listStatus

Exception in thread "main" java.lang.IllegalAccessError: tried to access method com.google.common.base.Stopwatch.<init>()V from class org.apache.hadoop.mapreduce.lib.input.FileInputFormat 
    at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.listStatus(FileInputFormat.java:262) 
    at org.apache.hadoop.mapreduce.lib.input.CombineFileInputFormat.getSplits(CombineFileInputFormat.java:217) 
    at org.apache.spark.rdd.NewHadoopRDD.getPartitions(NewHadoopRDD.scala:95) 
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:219) 
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:217) 
    at scala.Option.getOrElse(Option.scala:120) 
    at org.apache.spark.rdd.RDD.partitions(RDD.scala:217) 
    at org.apache.spark.rdd.MapPartitionsRDD.getPartitions(MapPartitionsRDD.scala:32) 
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:219) 
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:217) 
    at scala.Option.getOrElse(Option.scala:120) 

die relevanten gradle Abhängigkeiten Abschnitt:

compile('org.apache.spark:spark-core_2.10:1.3.1') 
compile('org.apache.hadoop:hadoop-mapreduce-client-core:2.6.2') {force = true} 
compile('org.apache.hadoop:hadoop-mapreduce-client-app:2.6.2') {force = true} 
compile('org.apache.hadoop:hadoop-mapreduce-client-shuffle:2.6.2') {force = true} 
compile('com.google.guava:guava:19.0') { force = true } 

Antwort

18

Version 2.6.2 von hadoop:hadoop-mapreduce-client-core nicht zusammen mit guava verwendet werden kann ‚s neue Versionen (habe ich versucht, 17.0-19.0) seit guava‚s StopWatch Konstruktor nicht zugegriffen werden kann (was oben IllegalAccessError)

mit hadoop-mapreduce-client-core‘ s neueste Version - 2.7.2, mit zwei zusätzlichen Abhängigkeiten (in dem sie sie org.apache.hadoop.util.StopWatch verwenden, eher nicht guava ‚s StopWatch in dem obigen Verfahren verwenden) das Problem gelöst, die erforderlich waren:

compile('org.apache.hadoop:hadoop-mapreduce-client-core:2.7.2') {force = true} 

compile('org.apache.hadoop:hadoop-common:2.7.2') {force = true} // required for org.apache.hadoop.util.StopWatch 

compile('commons-io:commons-io:2.4') {force = true} // required for org.apache.commons.io.Charsets that is used internally 

Anmerkung: gibt es zwei org.apache.commons.io Pakete: commons-io:commons-io (unsere hier) und org.apache.commons:commons-io (alte, 2007). Achten Sie darauf, dass Sie die richtige angeben.

2

Klingt, als ob Sie eine Guava-Versionskonflikt haben.

etwas in Ihrer Code-Basis versucht, den Stopwatch Konstruktor aufzurufen, aber die Konstrukteure von in Guava 17,0 für statische Factory-Methoden entfernt wurden (createStarted() und createUnstarted()), die in der Guave 15,0 hinzugefügt wurden.

Sie sollten den Code, der versucht, die Konstruktoren zu verwenden, aktualisieren, um stattdessen die statischen Factory-Methoden zu verwenden.

+0

Vielen Dank! Es war in der Tat ein Mismatch, ich musste einige Abhängigkeiten aktualisieren (weiter unten), damit es nicht mehr die StopWatch von Guava verwendet. – Lika

2

Ich hatte dieses Problem mit Spark 1.6.1, weil eine unserer zusätzlichen Abhängigkeiten Guava 14.0.1 verdrängt und durch 18.0 ersetzt wurde. Spark hat die Basisabhängigkeit für hadoop-client von 2.2. Siehe [Maven Repo] (https://mvnrepository.com/artifact/org.apache.spark/spark-core_2.10/1.6.1)

Die Lösung, die für ist gearbeitet hinzuzufügen libraryDependencies folgendes zu SBT: "org.apache.hadoop" % "hadoop-client" % "2.7.2"

1

In meinem Fall, weil die Zugabe guava 21.0 Ergebnisses in Fehlern.

<dependency> 
      <groupId>com.google.guava</groupId> 
      <artifactId>guava</artifactId> 
      <version>21.0</version> 
</dependency> 

Danach bin ich mit guava 15.0 oder über die Abhängigkeit entfernen. Mein Code funktioniert gut.

1

Ich habe gerade meine Guava-Version von 19.0 auf 15.0 geändert und es hat funktioniert. Ich verwende derzeit Version funke 2.2

<dependency> 
     <groupId>com.google.guava</groupId> 
     <artifactId>guava</artifactId> 
     <version>15.0</version> 
     </dependency>