2012-01-24 10 views
7

sto cercando di eseguire i benchmark Terasort e sto ottenendo la seguente eccezione:Hadoop: errore nella configurazione oggetto

java.lang.RuntimeException: Error in configuring object 
    at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:93) 
    at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:64) 
    at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:117) 
    at org.apache.hadoop.mapred.MapTask$OldOutputCollector.<init>(MapTask.java:573) 
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:435) 
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:371) 
    at org.apache.hadoop.mapred.Child$4.run(Child.java:259) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:396) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059) 
    at org.apache.hadoop.mapred.Child.main(Child.java:253) 
Caused by: java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:88) 
    ... 10 more 
Caused by: java.lang.IllegalArgumentException: can't read paritions file 
    at org.apache.hadoop.examples.terasort.TeraSort$TotalOrderPartitioner.configure(TeraSort.java:213) 
    ... 15 more 
Caused by: java.io.FileNotFoundException: File _partition.lst does not exist. 
    at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:371) 
    at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:245) 
    at org.apache.hadoop.fs.FileSystem.getLength(FileSystem.java:720) 
    at org.apache.hadoop.io.SequenceFile$Reader.<init>(SequenceFile.java:1417) 
    at org.apache.hadoop.io.SequenceFile$Reader.<init>(SequenceFile.java:1412) 
    at org.apache.hadoop.examples.terasort.TeraSort$TotalOrderPartitioner.readPartitions(TeraSort.java:153) 
    at org.apache.hadoop.examples.terasort.TeraSort$TotalOrderPartitioner.configure(TeraSort.java:210) 
    ... 15 more 

I comandi TeraGen funzionano bene e hanno creato i file di input per TeraSort. Ecco l'elenco della mia directory di input:

bin/hadoop fs -ls /user/hadoop/terasort-input/Warning: Maximum heap size rounded up to 1024 MB 
Found 5 items 
-rw-r--r-- 1 sqatest supergroup   0 2012-01-23 14:13 /user/hadoop/terasort-input/_SUCCESS 
drwxr-xr-x - sqatest supergroup   0 2012-01-23 13:30 /user/hadoop/terasort-input/_logs 
-rw-r--r-- 1 sqatest supergroup   129 2012-01-23 15:49 /user/hadoop/terasort-input/_partition.lst 
-rw-r--r-- 1 sqatest supergroup 50000000000 2012-01-23 13:30 /user/hadoop/terasort-input/part-00000 
-rw-r--r-- 1 sqatest supergroup 50000000000 2012-01-23 13:30 /user/hadoop/terasort-input/part-00001 

Ecco il mio comando per l'esecuzione del terasort:

bin/hadoop jar hadoop-examples-0.20.203.0.jar terasort -libjars hadoop-examples-0.20.203.0.jar /user/hadoop/terasort-input /user/hadoop/terasort-output 

faccio vedere il file _partition.lst nel mio indice di ingresso, io non capisco il motivo per cui i sto ottenendo il FileNotFoundException.

ho seguito i dettagli di configurazione disponibili per gli ospiti: http://www.michael-noll.com/blog/2011/04/09/benchmarking-and-stress-testing-an-hadoop-cluster-with-terasort-testdfsio-nnbench-mrbench/

+0

Cerca in RawLocalFileSystem non in DistributedFileSystem. Stai fornendo l'indirizzo namenodes nella configurazione? –

+0

Dove posso farlo? Prima di eseguire TeraSort, ho eseguito TeraGen, che è stato completato con successo, quindi ho pensato che la configurazione fosse corretta. Come posso verificarlo? –

risposta

0

Il problema si stava verificando perché stavo distribuendo il lavoro su un NFS. Ho cambiato il file hadoop.tmp.dir per puntarlo su un file system locale (/ tmp) e il problema è scomparso in un batter d'occhio.

0

ho avuto questo lavoro nel modo seguente:

sono in esecuzione in modalità locale dalla mia directory base Hadoop, Hadoop-1.0.0 con un ingresso sottodirectory sotto di esso, e ottengo lo stesso errore che si fa.

Ho modificato il file java in errore per farlo registrare il percorso anziché il nome file, lo ha ricostruito ("ant binary") e lo ha reran. Stava cercando il file nella directory da cui stavo scappando. Non ho idea se stava cercando nella directory base di hadoop o nella directory di esecuzione.

... quindi ho creato un collegamento simbolico nella directory Eseguo terasort indicando il file reale nella directory di input.

È un hack economico, ma funziona.

- Tim. 
+0

Non lo sto eseguendo in modalità locale. La mia directory di input risiede su HDFS, non ho modo di creare link simbolici. Anche io sospetto che stia guardando nel mio file system locale, ma non capisco perché. Ho controllato i log per mapred.input.dir e dice "> hdfs: // localhost: 54310/user/hduser/terasort-input", che dice hdfs. È semplicemente sconcertante –

0

Avete impostato l'esecuzione in modalità pseudo distribuita (o un cluster reale)? A meno che non si configuri Hadoop, verrà eseguito in modalità di esecuzione del lavoro locale (come librerie all'interno di un singolo processo) - Terasort NON funziona in modalità LocalJobRunner. Cerca la parola LocalJobRunner nell'output da verificare.

Ecco un link per l'installazione HDFS, SSH e rsync: http://hadoop.apache.org/docs/r1.1.1/single_node_setup.html#PseudoDistributed

0

Sto usando Cloudera CDH4. affrontato problema simile con il mio altro programma hadoop. ritengono che il problema riguardi il collegamento di librerie esterne.

Il programma funzionava correttamente in Eclipse (modalità locale) ma quando ho provato a eseguirlo in modalità pseudo distribuita, ho ricevuto questo messaggio di errore.

Soluzione temporanea: - Creato un file jar da Eclipse con l'opzione di gestione delle librerie - copia le librerie richieste in una sottocartella accanto al JAR generato. - Copiato il file JAR sulla directory home di hadoop (il percorso in cui sono posizionati i file hadoop-exampls.jar)

con questa correzione sono in grado di eseguire il programma hadoop senza errori. spero che questo sia di aiuto

Problemi correlati