2010-06-07 6 views
6

Ho avviato un progetto Maven che tenta di implementare l'algoritmo MapReduce in java 1.5.0_14. Ho scelto la versione hadoop dell'API 0.20.2. Nel pom.xml sto usando quindi la seguente dipendenza:0.20.2 Versione hadoop dell'API con java 5

< dipendenza>

< groupId>org.apache.hadoop< /groupId>  
< artifactId>hadoop-core< /artifactId>  
< version>0.20.2< /version> 

</dipendenza>

Ma quando sto usando un'importazione al org.apache. classi hadoop, ho ricevuto il seguente errore:

file di classe non valido: $ {HOME_DIR} \ repository \ org \ apache \ hadoop \ hadoop-core \ 0.20.2 \ hadoop-core-0.20.2.jar (org /apache/hadoop/fs/Path.class) cl il file ass ha la versione errata 50.0, dovrebbe essere 49.0.

Qualcuno sa come posso risolvere questo problema.

Grazie.

risposta

2

Maven di default compila la compatibilità con JDK 1.4. Devi cambiare questo.

È necessario aggiungere questo alla vostra pom.xml:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>2.0.2</version> 
    <configuration> 
     <source>1.6</source> 
     <target>1.6</target> 
    </configuration> 
</plugin> 

[Edit: la ringrazio per aver ricordato Sean Hadoop richiede JDK 6]

+0

La versione del file di classe 50 esegue il mapping a Java 6, quindi in realtà ha bisogno di specificare la sorgente e il target di "1.6". (Hadoop richiede Java 6.) –

1

mi sono imbattuto in questo stesso problema. La versione sbt stessa era in esecuzione su Java 5, che è l'impostazione predefinita sul mio Mac per un motivo stupido ma valido. Una volta che ho cambiato il mio script sbt per iniziare esplicitamente con Java6, tutto ha funzionato bene.

0

A prescindere dalle configurazioni di destinazione del plugin del maven-compiler & (che controlla solo la compilazione del proprio codice sorgente) è necessario utilizzare una JVM 1.6 per eseguire il codice Hadoop poiché è compilato per la JVM "1.6".

Quindi, è sufficiente installare un 1.6 java runtime e utilizzarlo per eseguire il programma.