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

时间:2016-09-19 07:30:31

标签: 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文件来运行它?

1 个答案:

答案 0 :(得分:7)

令人遗憾的是boto3和EMR API的文档记录很差。最低限度,单词计数示例如下所示:

DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
Date inputDate = inputFormat.parse(this.getCreatedTime());
DateFormat outputFormat = new SimpleDateFormat("outputFormat");
String output = outputFormat.format(inputDate);

我不记得需要使用boto执行此操作,但我在运行简单的流式传输作业时遇到问题而没有禁用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', )

此外,如果您的脚本位于S3的某个位置,请使用vmem-check-enabled下载它(将-files附加到参数中,使下载的文件在群集中可用为#filename