python - boto EMR 添加步骤并自动终止

标签 python amazon-web-services boto3 emr

python 2.7.12

boto3==1.3.1

如何向正在运行的 EMR 集群添加一个步骤在该步骤完成后终止集群,无论它是失败还是成功?

创建集群

response = client.run_job_flow(
    Name=name,
    LogUri='s3://mybucket/emr/',
    ReleaseLabel='emr-5.9.0',
    Instances={
        'MasterInstanceType': instance_type,
        'SlaveInstanceType': instance_type,
        'InstanceCount': instance_count,
        'KeepJobFlowAliveWhenNoSteps': True,
        'Ec2KeyName': 'KeyPair',
        'EmrManagedSlaveSecurityGroup': 'sg-1234',
        'EmrManagedMasterSecurityGroup': 'sg-1234',
        'Ec2SubnetId': 'subnet-1q234',
    },
    Applications=[
        {'Name': 'Spark'},
        {'Name': 'Hadoop'}
    ],
    BootstrapActions=[
        {
            'Name': 'Install Python packages',
            'ScriptBootstrapAction': {
                'Path': 's3://mybucket/code/spark/bootstrap_spark_cluster.sh'
            }
        }
    ],
    VisibleToAllUsers=True,
    JobFlowRole='EMR_EC2_DefaultRole',
    ServiceRole='EMR_DefaultRole',
    Configurations=[
        {
            'Classification': 'spark',
            'Properties': {
                'maximizeResourceAllocation': 'true'
            }
        },
    ],
)

添加一个步骤

response = client.add_job_flow_steps(
    JobFlowId=cluster_id,
    Steps=[
        {
            'Name': 'Run Step',
            'ActionOnFailure': 'TERMINATE_CLUSTER',
            'HadoopJarStep': {
                'Args': [
                    'spark-submit',
                    '--deploy-mode', 'cluster',
                    '--py-files',
                    's3://mybucket/code/spark/spark_udfs.py',
                    's3://mybucket/code/spark/{}'.format(spark_script),
                    '--some-arg'
                ],
                'Jar': 'command-runner.jar'
            }
        }
    ]
)

这成功添加了一个步骤并运行,但是,当该步骤成功完成时,我希望集群自动终止,如 AWS CLI 中所述:http://docs.aws.amazon.com/cli/latest/reference/emr/create-cluster.html

最佳答案

在你的情况下(使用 boto3 创建集群)你可以添加这些标志 'TerminationProtected': False, 'AutoTerminate': True, 到您的集群创建。这样,在您完成运行集群的步骤后,集群将被关闭。

另一种解决方案是在您要运行的步骤之后立即添加另一个步骤来终止集群。所以基本上你需要运行这个命令作为步骤

aws emr terminate-clusters --cluster-ids your_cluster_id

棘手的部分是检索 cluster_id。 您可以在这里找到一些解决方案:Does an EMR master node know it's cluster id?

关于python - boto EMR 添加步骤并自动终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46911082/

相关文章:

amazon-web-services - AWS CloudFront 和 S3 : How to make new S3 content immediately available in CloudFront?

amazon-web-services - 直接查询时AWS describe_containers返回空

amazon-web-services - "Multi-AZ Deployment"和 "Read Replica Verison Multi-AZ Deployment"的区别

amazon-web-services - 如何更改 aws-ec2 实例类型?

python - boto3 客户端 NoRegionError : You must specify a region error only sometimes

python - 有没有一种简单的方法(除了重定向之外)让 Google App Engine 指向另一个 Web 服务器来获取内容?

python - Google Colab 在多大程度上支持 Python 类型?

python - django 模板不呈现

python - 在 Python 中使用 Paramiko 时如何使 EllipticCurvePublicNumbers.encode_point CryptographyDeprecationWarning 静音

python - 如何使用 Python 从 Amazon Polly 将文件另存为 mp3