2010-12-16 13 views
18

Od this guide pomyślnie przeprowadziłem próbne ćwiczenie. Ale na kolejny mój mapreduce pracę, otrzymuję następujący błąd
ERROR streaming.StreamJob: Job not Successful!
10/12/16 17:13:38 INFO streaming.StreamJob: killJob...
Streaming Job Failed!

błąd w pliku dziennikaZadanie Hadoop Streaming nie powiodło się w pythonie

java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 2 
at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:311) 
at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:545) 
at org.apache.hadoop.streaming.PipeMapper.close(PipeMapper.java:132) 
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:57) 
at org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:36) 
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:358) 
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:307) 
at org.apache.hadoop.mapred.Child.main(Child.java:170) 

Mapper.py

import sys 

i=0 

for line in sys.stdin: 
    i+=1 
    count={} 
    for word in line.strip().split(): 
     count[word]=count.get(word,0)+1 
    for word,weight in count.items(): 
     print '%s\t%s:%s' % (word,str(i),str(weight)) 

Reducer.py

import sys 

keymap={} 
o_tweet="2323" 
id_list=[] 
for line in sys.stdin: 
    tweet,tw=line.strip().split() 
    #print tweet,o_tweet,tweet_id,id_list 
    tweet_id,w=tw.split(':') 
    w=int(w) 
    if tweet.__eq__(o_tweet): 
     for i,wt in id_list: 
      print '%s:%s\t%s' % (tweet_id,i,str(w+wt)) 
     id_list.append((tweet_id,w)) 
    else: 
     id_list=[(tweet_id,w)] 
     o_tweet=tweet 

Polecenie [edit] do uruchomienia zadania:

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

Dane wejściowe to dowolna losowa sekwencja zdań.

Dzięki,

Odpowiedz

19

Twój -mapper i -reducer powinny być tylko nazwa skryptu.

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

Kiedy skrypty znajdują się w pracy, która jest w innym folderze ciągu HDFS który jest w stosunku do wykonującego zadania próba jako „” (Jeśli chcesz mieć jeszcze inny plik, na przykład tablicę wyszukiwania, możesz otworzyć go w Pythonie, tak jakby był w tym samym katalogu, co twoje skrypty, podczas gdy twój skrypt znajduje się w zadaniu M/R)

upewnić się, że chmod a + x mapper.py i chmod a + x reducer.py

+0

dzięki za odpowiedź, ale nadal otrzymuję ten sam błąd. – db42

+8

spróbuj dodać #!/Usr/bin/env python do początku skryptu Pythona, powinno być możliwe wykonanie z wiersza poleceń przez wykonanie cat data.file | ./mapper.py | sort | ./reducer. py i nie będzie bez "#!/usr/bin/env python" na górze pliku –

+0

dzięki Joe, to załatwiło sprawę. – db42

12

Spróbuj dodać

#!/usr/bin/env python 

początku skryptu.

Albo

-mapper 'python m.py' -reducer 'r.py' 
+0

Świetnie! Rozwiązuje to mój problem podczas dodawania "#!/Usr/bin/env python" do nagłówka. –

+0

Cholera, skopiuj wklejanie kodu przez vima usunął '#!' I spowodował ten problem dla mnie.Dzięki za przypomnienie, aby dodać nagłówek !! – asgs

2

wpadłem na tym błędzie niedawno i mój problem okazał się być czymś tak oczywistym (z perspektywy czasu), a także na innych rozwiązaniach:

ja po prostu miałem błąd w moim Kod Pythona. (W moim przypadku używałem formatowania napisów w Pythonie v2.7, podczas gdy klaster AWS EMR korzystał z Pythona v2.6).

Aby znaleźć rzeczywisty błąd w Pythonie, przejdź do interfejsu użytkownika Job Tracker (w przypadku AWS EMR, port 9100 dla AMI 2.x i port 9026 dla AMI 3.x); znajdź nieudanego mappera; otwórz jego logi; i odczytać wyjście stderr.

0

Upewnij się, że katalog wejściowy zawiera tylko prawidłowe pliki

+0

Mam ten problem .. Nie mam żadnego problemu z uruchomieniem poza Mopem ... ale próbowałem sugestii tutaj i nie widzę niczego w dziennikach .. w inny sposób debugowania tego problemu –

Powiązane problemy