2016-04-05 16 views
5

sto cercando di eseguire l'applicazione piccola scintilla e sto ottenendo il seguente eccezione:IllegalAccessError a cronometro di guava da 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) 

le relative dipendenze Gradle sezione:

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 } 

risposta

18

versione 2.6.2 di hadoop:hadoop-mapreduce-client-core non possono essere utilizzati insieme con guava 's nuove versioni (ho provato 17.0-19.0) dal guava 's StopWatch costruttore non è possibile accedere (causando sopra IllegalAccessError)

utilizzando hadoop-mapreduce-client-core' s ultima versione - 2.7.2 (in cui non usano guava s' StopWatch nel metodo di cui sopra, piuttosto che usano org.apache.hadoop.util.StopWatch) ha risolto il problema, con due ulteriori dipendenze che sono stati richiesti:

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 

nota: ci sono due pacchetti: org.apache.commons.io commons-io:commons-io (nostri qui), e org.apache.commons:commons-io (vecchio, 2007). assicurati di includere quello corretto.

2

Sembra che tu abbia una mancata corrispondenza della versione di Guava.

qualcosa nella vostra codebase sta cercando di richiamare il costruttore Stopwatch, ma i costruttori sono stati rimossi da in Guava 17,0 a favore di metodi factory statici (createStarted() e createUnstarted()) che sono stati aggiunti in Guava 15.0.

È necessario aggiornare qualsiasi codice stia cercando di utilizzare i costruttori per utilizzare invece i metodi di factory static.

+0

Grazie! In effetti, si trattava di una mancata corrispondenza, ho dovuto aggiornare diverse dipendenze (descritte di seguito) per farla smettere di usare lo StopWatch di guava. – Lika

2

Ho avuto questo problema con Spark 1.6.1 perché una delle nostre dipendenze aggiuntive sfruttava Guava 14.0.1 e lo sostituiva con 18.0. Spark ha la dipendenza di base per hadoop-client di 2.2. Vedere [Maven Repo] (https://mvnrepository.com/artifact/org.apache.spark/spark-core_2.10/1.6.1)

La soluzione che ha funzionato per è quello di aggiungere SBT libraryDependencies il seguente: "org.apache.hadoop" % "hadoop-client" % "2.7.2"

1

Nel mio caso, a causa di aggiunta guava 21.0 risultato per errore.

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

Dopo di che, io sto usando guava 15.0 o rimuovere sopra dipendenza. Il mio codice funziona bene.

1

Ho appena cambiato la versione di guava da 19.0 a 15.0 e ha funzionato. Attualmente sto usando la versione spark 2.2

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