Потоковая программа Amazon EMR MapReduce прервана с ошибками - PullRequest
0 голосов
/ 03 мая 2019

Я попытался запустить программу mapReduce «подсчет слов» с потоковой передачей Hadoop. Мой код для картографа идеален. Он отлично работает на моей локальной машине с Linux и на виртуальной машине Cloudera. Но когда я использую Amazon AWS EMR, это никогда не удавалось. Это всего лишь несколько строк кода, и я понятия не имею, что пошло не так.

Код на самом деле является примером кода от Яндекса через Coursera (курс Big Data, который я сейчас изучаю).

Вот код:

#!/usr/bin/python
import sys
import re

reload(sys)
sys.setdefaultencoding('utf-8')

for line in sys.stdin:
    try:
        article_id, text = unicode(line.strip()).split('\t', 1)
    except ValueError as e:
        continue
    text = re.sub("^\W+|\W+$", "", text, flags=re.UNICODE)
    words = re.split("\W*\s+\W*", text, flags=re.UNICODE)   
    for word in words:
        print "%s\t%d" % (word.lower(), 1)

Это было сгенерировано EMR:

hadoop-streaming -files s3://doc-sim/Python2code/word_count_test.py \ 
-mapper "word_count_test.py" \
-reducer aggregate \
-input s3://doc-sim/datasets/articles-part.txt \
-output s3://doc-sim/results/output2/

Я продолжал получать эту ошибку от AWS EMR:

Error: java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.substring(String.java:1967)
    at org.apache.hadoop.mapred.lib.aggregate.ValueAggregatorCombiner.reduce(ValueAggregatorCombiner.java:59)
    at org.apache.hadoop.mapred.lib.aggregate.ValueAggregatorCombiner.reduce(ValueAggregatorCombiner.java:36)
    at org.apache.hadoop.mapred.Task$OldCombinerRunner.combine(Task.java:1702)
    at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.sortAndSpill(MapTask.java:1657)
    at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.flush(MapTask.java:1509)
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:463)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:344)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:175)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:422)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1844)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:169)
...

Я надеюсь, что кто-то может помочь, иначе я больше не буду использовать Amazon.

1 Ответ

0 голосов
/ 04 мая 2019

Мне кажется, проблема в редукторе. Похоже, вы не указываете редуктор, поэтому пытаетесь удалить эту строку -reducer aggregate. Помните, что вы используете потоковую передачу Haddop, и вы должны указать все картографы и редукторы. Другое дело, что вы отправляете текстовое сообщение с ". Пожалуйста, удалите его, вам не нужно указывать таким образом, просто word_count_test.py.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...