2013-03-12 15 views
5

starałem się postępować zgodnie z instrukcjami na tej stronie: http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python/Uruchamianie kodu Pythona na Hadoop Failed

$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 

Mówi

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

Kiedy przeglądałem poprzez URL: jobdetails.jsp/

znalazłem dużo z wyjątkiem

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 

Nie jestem w stanie tego naprawić, pls pomoże mi uruchomić pythona pgm.

Odpowiedz

3

Jeśli sprawdzane zgodnie z instrukcjami starannie na 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 

tam to jasno pokazuje, że nie ma potrzeby, aby skopiować mapper.py i reducer.py do HDFS można połączyć oba pliki z lokalny system plików: as/path/to/mapper. Jestem pewien, że możesz uniknąć powyższego błędu.

+1

Tak, połączyłem to z moim lokalnym fs –

+0

niedopuszczalnym? czy istnieje powód, aby powrócić? –

+0

@studhadoop Jeśli rozwiązanie rozwiązuje problem, możesz zaakceptować odpowiedź. Dzięki –

1

Wygląda na to, że problem jest w linii.

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

Czy sprawdzisz, czy plik /user/root/wordcountpython/mapper.py istnieje, czy nie. Jeśli istnieje, to jakie jest uprawnienie do tego pliku.

Użytkownik, przez który korzystasz z hadoop, ma uprawnienia do wykonania i odczytu tego pliku?

+0

ys podłączyłem go z mojego lokalnego pliku sys.but ponownie nie działa. –

3

Być może zechcesz sprawdzić, czy po twoim numerze nie masz nowej linii stylu! linia w pliku mapper.py. Jeśli to zrobisz, hadoop może nie być w stanie znaleźć twojego interpretera python, ponieważ zobaczy on dodatkowy CR. Na przykład./usr/local/bin/python^M zamiast/usr/local/bin/python gdzie^M to CR. Wypróbuj polecenie dos2unix na swoim programie odwzorowującym i redukującym.

+0

jak to zrobić, aby mapper i reduktor –

+0

dos2unix mapper.py –

+0

... przepraszam ... po prostu uruchom 'dos2unix mapper.py', zakładając, że masz zainstalowane dos2unix. A następnie to samo dla twojego reducer.py. Możesz poprosić o nową linię, aby potwierdzić, że jest tam wcześniej i później: [http://stackoverflow.com/questions/73833/how-do-you-search-for-files-containing-dos-line-endings- crlf-with-grep-under-l]. Ponadto, jeśli jest to Twój problem, możesz rozważyć zmianę sposobu zapisywania plików przez twój edytor. Na przykład. jeśli używasz Eclipse, domyślnie jest dla nowych linii w stylu DOS –

Powiązane problemy