Hadoop: выходной файл имеет двойной вывод

Я запускаю программу Hadoop и имею следующий входной файл, input.txt:

1
2

mapper.py:

import sys
for line in sys.stdin:
    print line,
print "Test"

reducer.py:

import sys
for line in sys.stdin:
    print line,

Когда я запускаю его без Hadoop: $ cat ./input.txt | ./mapper.py | ./reducer.py вывод соответствует ожидаемому:

1
2
Test

Однако запуск его через Hadoop через потоковый API (как описано здесь), последняя часть вывода кажется несколько "удвоенной":

1
2
Test    
Test

Кроме того, когда я запускаю программу через Hadoop, кажется, что вероятность сбоя составляет 1/4 из-за этого:

Ошибка: количество невыполненных задач карты превысило допустимый предел. Количество отказов: 1.

Я смотрел на это в течение некоторого времени и не могу понять, что я не получаю. Если кто-то может помочь с этими проблемами, буду очень признателен! Спасибо.

редактировать: когда input.txt:

1
2
3
4
5
6
7
8
9
10

Результат:

1   
10  
2   
3   
4   
5   
6   
7   
8   
9   
Test    
Test

person Objc55    schedule 25.09.2013    source источник
comment
Я попробовал это, и я получаю тот же результат даже с потоковой передачей Hadoop!   -  person Amar    schedule 25.09.2013
comment
@ Амар Очень странно. Это определенно удваивает его для меня.   -  person Objc55    schedule 25.09.2013
comment
Можете ли вы опубликовать выходные данные Hadoop, которые отображаются на экране после отправки задания с помощью указанной вами команды (bin/hadoop jar contrib/streaming/hadoop-streaming.jar \ -file /hadoop/mapper.py -mapper mapper.py -file /hadoop/reducer.py -reducer reducer.py -input /hadoop/input.txt -output /hadoop/output)?   -  person cabad    schedule 03.10.2013
comment
@cabad Об этом говорится в сообщении - вывод равен 1,2,Test,Test с запятыми, обозначающими разрывы строк.   -  person Objc55    schedule 04.10.2013
comment
Это я поняла. Я имею в виду остальную часть вывода; это предоставляет информацию о том, как Hadoop запускает ваш код.   -  person cabad    schedule 04.10.2013
comment
@cabad Извините - я не совсем понимаю, что вы имеете в виду, так как это весь вывод. Я пробовал тот же код с вводом чисел 1-10, каждый в новой строке, и обновлю это в сообщении.   -  person Objc55    schedule 04.10.2013
comment
@cabad Если вы хотите, чтобы я протестировал определенный входной файл, сообщите мне об этом. Спасибо   -  person Objc55    schedule 04.10.2013
comment
Хорошо, я думаю, моя терминология была запутанной. Я не имею в виду вывод в output.txt. Я имею в виду вывод на экран (т.е. на stdout).   -  person cabad    schedule 04.10.2013
comment
@cabad О, понял. Кроме карты и сокращения процентов и URL-адреса отслеживания, никакой информации не предоставляется.   -  person Objc55    schedule 04.10.2013
comment
@cabad Мне интересно, может ли это быть связано с этой проблемой: stackoverflow.com/questions/19188263/   -  person Objc55    schedule 04.10.2013
comment
Эх... Я не уверен, действительно ли ты хочешь помочь или нет. Кроме карты и сокращения процентов и URL-адреса отслеживания, никакой информации не предоставляется. Вы уверены? Разве у вас нет строки с надписью «Всего входных путей для обработки: x»?   -  person cabad    schedule 05.10.2013
comment
@cabad Да, извините. Я предположил, что это отражает то, что написано в записи командной строки. Там написано Total input paths to process : 1   -  person Objc55    schedule 05.10.2013
comment
Хорошо, тогда я понятия не имею, почему вы получаете этот вывод. Я могу думать только о трех альтернативах: (1) ваш файл input.txt в HDFS имеет тестовую строку в последней строке, (2) вы по ошибке используете свой преобразователь в качестве редуктора или (3) вы по ошибке добавили оператор print Test в конце вашего редуктора.   -  person cabad    schedule 05.10.2013
comment
@cabad Спасибо за попытку, это, конечно, странно. Я дважды проверил, что ни одна из этих трех возможностей не происходит.   -  person Objc55    schedule 05.10.2013


Ответы (1)


Это дает тот же результат. Я предполагаю, что вы указываете местоположение редуктора только для mapper.py. Убедитесь, что вы указываете правильный путь к файлу reducer.py.

person user1525721    schedule 27.09.2013
comment
Я пробовал это и, к сожалению, столкнулся с той же проблемой. Это консольная команда: bin/hadoop jar contrib/streaming/hadoop-streaming.jar \ -file /hadoop/mapper.py -mapper mapper.py -file /hadoop/reducer.py -reducer reducer.py -input /hadoop/input.txt -output /hadoop/output - person Objc55; 30.09.2013
comment
Есть идеи? Понятия не имею, почему это происходит :( - person Objc55; 01.10.2013