Импорт файлов Python из S3 в Amazon Elastic MapReduce - PullRequest
0 голосов
/ 05 декабря 2018

Я хочу включить скомпилированные протоклассы в свой mapreduce и решил, что самый простой способ сделать это - сжать необходимые файлы python как tar.gz и загрузить их в S3.

Я наткнулся на этот ответ stackoverflow и выполнил следующие шаги для создания файла архива.Затем я использовал аргумент -cacheArchive для распространения файла по кластерам.

Использование boto для запуска задания EMR выглядит следующим образом:

Steps=[{
    'Name': '...',
    'ActionOnFailure': 'TERMINATE_CLUSTER',
    'HadoopJarStep': {
        'Jar': 'command-runner.jar',
        'Args':
            ['hadoop-streaming',
             '-files', 's3://myBucket/mapper.py,'
                       's3://myBucket/reducer.py',
             '-mapper', 'mapper.py',
             '-input', 's3://myBucket/input/',
             '-output', 's3://myBucket/output',
             '-reducer', 'reducer.py',
             '-cacheArchive', 's3://myBucket/required.tgz#required']
    }
}]

mapper.py

#!/usr/bin/env python

import sys

sys.path.append('./required')
from primitives_pb2 import Variant

for line in sys.stdin:
    # DO THINGS

Я получаю следующую ошибку, когда EMR.

Ошибка: java.lang.RuntimeException: PipeMapRed.waitOutputThreads (): сбой подпроцесса с кодом 1 в org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads (PipeMapRed.java:332) в org.apache.hadoop.streaming.PipeMapRed.mapRedFinished (PipeMapRed.java:545) в org.apache.hadoop.streaming.PipeMapper.30ava: Pipe) в org.apache.hadoop.mapred.MapRunner.run (MapRunner.java:81) в org.apache.hadoop.streaming.PipeMapRunner.run (PipeMapRunner.java:34) в org.apache.hadoop.mapred.MapTask.runOldMapper (MapTask.java:452) в org.apache.hadoop.mapred.MapTask.run (MapTask.java:344) в org.apache.hadoop.mapred.YarnChild $ 2.run (YarnChild.java:171) в Java.security.AccessController.doPrivileged (собственный метод) в javax.security.auth.Subject.doAs (Subject.java:415) в org.apache.hadoop.security.UserGroupInformation.doAs (UserGroupInformation.java:1628) в org.apache.hadoop.mapred.YarnChild.main (YarnChild.java:166)

Кажется, что mapreduce работает нормально при локальном запуске, поэтому я не верю, что произошла ошибка с тем, как я написал mapper.py или reducer.py.

...