2016-09-19 64 views
7

Próbuję przeprowadzić migrację kilku zadań MR, które napisałem w pythonie z AWS EMR 2.4 do AWS EMR 5.0. Do tej pory używałem boto 2.4, ale nie obsługuje EMR 5.0, więc staram się przejść na boto3. Wcześniej, podczas korzystania z boto 2.4, użyłem modułu StreamingStep do określenia lokalizacji wejściowej i lokalizacji wyjściowej, a także lokalizacji moich plików źródłowych mappera i reduktora. Korzystając z tego modułu, nie musiałem tworzyć ani przesyłać żadnych słoików, by móc wykonywać swoje zadania. Jednak nie można znaleźć odpowiednika dla tego modułu w dowolnym miejscu w dokumentacji Boto3. Jak mogę dodać krok strumieniowania w boto3 do mojego zadania MR, więc nie muszę przesyłać pliku jar, aby go uruchomić?Dodaj etap przesyłania strumieniowego do pracy MR w boto3 na AWS EMR 5.0

Odpowiedz

5

To niefortunne, że Boto3 i EMR API są raczej słabo udokumentowane. Minimalnie, słowo przykład liczenie będzie wyglądać następująco:

import boto3 

emr = boto3.client('emr') 

resp = emr.run_job_flow(
    Name='myjob', 
    ReleaseLabel='emr-5.0.0', 
    Instances={ 
     'InstanceGroups': [ 
      {'Name': 'master', 
      'InstanceRole': 'MASTER', 
      'InstanceType': 'c1.medium', 
      'InstanceCount': 1, 
      'Configurations': [ 
       {'Classification': 'yarn-site', 
        'Properties': {'yarn.nodemanager.vmem-check-enabled': 'false'}}]}, 
      {'Name': 'core', 
      'InstanceRole': 'CORE', 
      'InstanceType': 'c1.medium', 
      'InstanceCount': 1, 
      'Configurations': [ 
       {'Classification': 'yarn-site', 
        'Properties': {'yarn.nodemanager.vmem-check-enabled': 'false'}}]}, 
     ]}, 
    Steps=[ 
     {'Name': 'My word count example', 
     'HadoopJarStep': { 
      'Jar': 'command-runner.jar', 
      'Args': [ 
       'hadoop-streaming', 
       '-files', 's3://mybucket/wordSplitter.py#wordSplitter.py', 
       '-mapper', 'python2.7 wordSplitter.py', 
       '-input', 's3://mybucket/input/', 
       '-output', 's3://mybucket/output/', 
       '-reducer', 'aggregate']} 
     } 
    ], 
    JobFlowRole='EMR_EC2_DefaultRole', 
    ServiceRole='EMR_DefaultRole', 
) 

Nie pamiętam konieczności zrobić z boto, ale miałem problemy z systemem prostego strumieniowania pracę właściwie bez wyłączania vmem-check-enabled.

Ponadto, jeśli skrypt znajduje się gdzieś na S3, pobrać go za pomocą -files (dołączanie #filename do argumentu zrobić pobrany plik dostępny jako filename w klastrze).

+0

wielkie dzięki za pomoc. Zadziałało. Niestety nagroda, którą wyznaczyłem, zakończyła się na kilka godzin przed odpowiedzią. Ale i tak dzięki tonie. :) –