将流式传输步骤添加到在AWS EMR 5.0上运行的boto3中的MR作业

m_a*_*ber 9 python amazon-web-services emr boto3

我正在尝试将我在python中编写的几个MR作业从AWS EMR 2.4迁移到AWS EMR 5.0.直到现在我使用boto 2.4,但它不支持EMR 5.0,所以我试图转向boto3.之前,在使用boto 2.4时,我使用StreamingStep模块指定输入位置和输出位置,以及我的mapper和reducer源文件的位置.使用这个模块,我实际上没有必要创建或上传任何jar来运行我的工作.但是,我无法在boto3文档中的任何位置找到此模块的等效项.如何在boto3中将流式传输步骤添加到我的MR作业中,这样我就不必上传jar文件来运行它?

Tar*_*ato 7

不幸的是,boto3和EMR API的记录很差.最低限度,单词计数示例如下所示:

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',
)
Run Code Online (Sandbox Code Playgroud)

我不记得需要用boto做这个,但是我在运行简单的流式传输工作时遇到了问题而没有禁用vmem-check-enabled.

此外,如果您的脚本位于S3上的某个位置,请使用下载-files(附加#filename到参数使下载的文件可filename用于群集中).