Ошибка потокового задания Hadoop в python - PullRequest
20 голосов
/ 16 декабря 2010

Из этого руководства я успешно выполнил пример упражнения. Но при выполнении задания mapreduce я получаю следующую ошибку
ERROR streaming.StreamJob: Job not Successful!<br> 10/12/16 17:13:38 INFO streaming.StreamJob: killJob...<br> Streaming Job Failed!
Ошибка из файла журнала

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

Команда [edit] для запуска задания:

hadoop@ubuntu:/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

Ввод - любая случайная последовательность предложений.

Спасибо

Ответы [ 6 ]

21 голосов
/ 17 декабря 2010

Ваш -mapper и -reducer должны быть просто именем скрипта.

hadoop@ubuntu:/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

Когда ваши сценарии находятся в задании, которое находится в другой папке в hdfs, что относится к задаче попытки, выполняемой как "." (К вашему сведению, если вы когда-нибудь захотите рекламировать другой -файл, такой как справочная таблица, вы можете открыть его в Python, как если бы он находился в том же каталоге, что и ваши скрипты, пока ваш скрипт находится в задании M / R)

также убедитесь, что у вас есть chmod a + x mapper.py и chmod a + x reducer.py

13 голосов
/ 24 сентября 2014

Попробуйте добавить

 #!/usr/bin/env python

верх вашего скрипта.

Или

-mapper 'python m.py' -reducer 'r.py'
2 голосов
/ 12 декабря 2014

Недавно я столкнулся с этой ошибкой, и моя проблема оказалась такой же очевидной (задним числом), как и другие решения:

У меня просто была ошибка в моем коде Python. (В моем случае я использовал форматирование строк Python v2.7, тогда как кластер AWS EMR, который у меня был, использовал Python v2.6).

Чтобы найти фактическую ошибку Python, перейдите в веб-интерфейс Job Tracker (в случае AWS EMR, порт 9100 для AMI 2.x и порт 9026 для AMI 3.x); найти сбойный маппер; открыть его журналы; и прочитайте вывод stderr.

0 голосов
/ 18 января 2019

Вам необходимо явно указать, что mapper и reducer используются в качестве скрипта Python, поскольку у нас есть несколько вариантов потоковой передачи.Вы можете использовать одинарные или двойные кавычки.

-mapper "python mapper.py" -reducer "python reducer.py" 

или

-mapper 'python mapper.py' -reducer 'python reducer.py'

Полная команда выглядит следующим образом:

hadoop jar /path/to/hadoop-mapreduce/hadoop-streaming.jar \
-input /path/to/input \
-output /path/to/output \
-mapper 'python mapper.py' \
-reducer 'python reducer.py' \
-file /path/to/mapper-script/mapper.py \
-file /path/to/reducer-script/reducer.py
0 голосов
/ 29 августа 2018

У меня тоже была такая же проблема я пробовал решение Марвина W и я также устанавливаю spark, убедитесь, что у вас установлен spark, не только pyspark (зависимость), но также и установка framework руководство по установке

следуйте этому руководству

0 голосов
/ 12 июня 2016

убедитесь, что ваш входной каталог содержит только правильные файлы

...