boto EMR添加步骤并自动终止

duf*_*ffn 8 python amazon-web-services emr boto3

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

添加一个步骤

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

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

nic*_*r88 5

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

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

aws emr终止群集--cluster-ids your_cluster_id

棘手的部分是检索cluster_id。在这里,您可以找到一些解决方案:EMR主节点是否知道它的集群ID?

  • 当boto3 == 1.4.8时,当您调用`run_job_flow`时,默认情况下'AutoTerminate`被设置为True。“ KeepJobFlowAliveWhenNoSteps”是更改此行为的参数-https://boto3.readthedocs.io/en/latest/reference/services/emr.html#EMR.Client.run_job_flow (10认同)
  • @ Nobu感谢超级有用的人。我将“ KeepJobFlowAliveWhenNoSteps”设置为True,但没有意识到。那才是真正的解决方案……我认为这个答案有一个错误的解决方案,而第二个问题更像是骇客。 (3认同)