2013-03-12 11 views
5

ho cercato di seguire le istruzioni in questa pagina: http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python/l'esecuzione del codice Python su Hadoop Respinti

$bin/hadoop jar contrib/streaming/hadoop-streaming-1.0.4.jar -input /user/root/wordcountpythontxt -output /user/root/wordcountpythontxt-output -mapper /user/root/wordcountpython/mapper.py -reducer /user/root/wordcountpython/reducer.py -file /user/root/mapper.py -file /user/root/reducer.py 

Dice

File: /user/root/mapper.py does not exist, or is not readable. 
Streaming Command Fail 

Quando ho sfogliato l'url: jobdetails.jsp/

ho trovato molta eccezione

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.runOldMapper(MapTask.java:432) 
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:372) 
    at org.apache.hadoop.mapred.Child$4.run(Child.java:255) 
    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:1121) 
    at org.apache.hadoop.mapred.Child.main(Child.java:249) 
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) 
    ... 9 more 
Caused by: 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.MapRunner.configure(MapRunner.java:34) 
    ... 14 more 
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) 
    ... 17 more 
Caused by: java.lang.RuntimeException: configuration exception 
    at org.apache.hadoop.streaming.PipeMapRed.configure(PipeMapRed.java:230) 
    at org.apache.hadoop.streaming.PipeMapper.configure(PipeMapper.java:66) 
    ... 22 more 
Caused by: java.io.IOException: Cannot run program "/user/root/wordcountpython/mapper.py": error=2, No such file or directory 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:460) 
    at org.apache.hadoop.streaming.PipeMapRed.configure(PipeMapRed.java:214) 
    ... 23 more 
Caused by: java.io.IOException: error=2, No such file or directory 
    at java.lang.UNIXProcess.forkAndExec(Native Method) 
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:53) 
    at java.lang.ProcessImpl.start(ProcessImpl.java:91) 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:453) 
    ... 24 more 

non sono in grado di risolverlo. Pls mi aiuta a eseguire Python pgm.

risposta

3

Se è stata selezionata attentamente le istruzioni sulla link,

[email protected]:/usr/local/hadoop$ bin/hadoop jar contrib/streaming/hadoop-*streaming*.jar -file /home/hduser/mapper.py -mapper /home/hduser/mapper.py -file /home/hduser/reducer.py -reducer /home/hduser/reducer.py -input /user/hduser/gutenberg/* -output /user/hduser/gutenberg-output 

ci mostra chiaramente non c'è bisogno di copiare il mapper.py e reducer.py al HDFS, è possibile collegare sia i file dal il filesystem locale: come/percorso/a/mappatore. Sono sicuro che puoi evitare l'errore sopra riportato.

+1

sì, ho collegato quindi dal mio fs locale –

+0

non accettato? c'è un motivo per tornare? –

+0

@studhadoop Se la soluzione risolve il problema, è possibile accettare la risposta. Grazie –

1

Sembra che il problema sia in linea.

Caused by: java.io.IOException: Cannot run program "/user/root/wordcountpython/mapper.py": error=2, No such file or directory 

Si prega di verificare il file /user/root/wordcountpython/mapper.py esiste o no. Se esiste, qual è il permesso per quel file.

L'utente con cui si sta eseguendo hadoop ha il permesso di eseguire e leggere questo file?

+0

ys l'ho collegato dal mio file locale sys.but ancora non funziona. –

3

Si potrebbe voler controllare di non avere una nuova linea dos-style dopo il proprio #! linea all'interno di mapper.py. Se lo fai, hadoop potrebbe non essere in grado di trovare il tuo interprete python poiché vedrà un CR in più. Per esempio./usr/local/bin/python^M invece di/usr/local/bin/python dove^M è CR. Prova il comando dos2unix sia sul tuo mapper che sul riduttore.

+0

come farò a mapper e riduttore –

+0

dos2unix mapper.py –

+0

... mi dispiace ... basta eseguire 'dos2unix mapper.py', assumendo che tu abbia installato dos2unix. E poi lo stesso per il tuo reducer.py. Si potrebbe grep per la nuova riga dos per confermare che è lì prima e andato dopo: [http://stackoverflow.com/questions/73833/how-do-you-search-for-files-contain-dos-line-endings- crlf-con-grep-under-l]. Inoltre, se questo è il tuo problema, potresti prendere in considerazione la possibilità di cambiare il modo in cui il tuo editor salva i file. Per esempio. se usi Eclipse il default è per le nuove linee dos-style –

Problemi correlati