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を取得することです。ここでいくつかの解決策を見つけることができます: EMRマスターノードはそれがクラスターIDであることを知っていますか?