Запуск потоковой передачи Hadoop в кластере Amazon AWS EMR - PullRequest
0 голосов
/ 24 мая 2019

Здравствуйте, я довольно новичок в 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/

Мне нужно знать, если я что-то пропустил, спасибо, прежде чем

...