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
7
A
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).
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. :) –