Здравствуйте, я довольно новичок в MapReduce.
Я пытаюсь использовать python для запуска простой программы MapReduce на AWS. Мой код мапперов и редукторов, кажется, хорошо работает локально, но, поскольку я пытаюсь добавить шаг в кластер для запуска потоковой передачи hadoop, задание всегда не удавалось.
map.py
#!/usr/bin/env python
import sys
for line in sys.stdin:
line = line.strip()
words = line.split()
for word in words:
print('%s\t%s' % (word, 1))
reduce.py
#!/usr/bin/env python
import sys
from operator import itemgetter;
current_word = None
current_count = 0
word = None
for line in sys.stdin:
line = line.strip()
word, count = line.split('\t', 1)
try:
count = int(count)
except ValueError:
continue
if current_word == word:
current_count += count
else:
if current_word:
print('%s\t%s' % (current_word, current_count))
current_count = count
current_word = word
if current_word == word:
print('%s\t%s' % (current_word, current_count))
MapReduce отлично работает локально
Я использую графический интерфейс для добавления нового шага в кластер AWS EMR, и он переводит аргумент следующим образом:
hadoop-streaming -files s3://aws-logs-821627436605-us-east-1/map.py,s3://aws-logs-821627436605-us-east-1/reduce.py -mapper map.py -reducer reduce.py -input s3://aws-logs-821627436605-us-east-1/input/ -output s3://aws-logs-821627436605-us-east-1/output/
Мне нужно знать, если я что-то пропустил, спасибо, прежде чем