使用boto3将现有EMR集群克隆到新集群中

时间:2017-10-12 07:35:33

标签: amazon-web-services emr amazon-emr

使用boto3创建新集群时,我希望使用现有集群(已终止)的配置,从而克隆它。 据我所知,emr_client.run_job_flow要求将所有配置(Instances, InstanceFleets etc)作为参数提供。 有没有办法可以从现有的集群中克隆,就像我可以从aws控制台为EMR做的那样。

enter image description here

2 个答案:

答案 0 :(得分:0)

我可以推荐您使用AWS CLI来启动群集 它允许对您的群集配置进行版本控制,您可以使用 json 文件轻松加载步骤配置。

aws create-cluster --name "Cluster's name" --ec2-attributes KeyName=SSH_KEY --instance-type m3.xlarge --release-label emr-5.2.1 --log-uri s3://mybucket/logs/ --enable-debugging --instance-count 1 --use-default-roles --applications Name=Spark --steps file://step.json

step.json 的位置如下:

     [
      {
        "Name": "Step #1",
        "Type":"SPARK",
        "Jar":"command-runner.jar",
        "Args":
        [
          "--deploy-mode", "cluster",
          "--class", "com.your.data.set.class",
          "s3://path/to/your/spark-job.jar",
          "-c", "s3://path/to/your/config/or/not",
          "--aws-access-key", "ACCESS_KEY",
          "--aws-secret-key", "SECRET_KEY"
        ],
        "ActionOnFailure": "CANCEL_AND_WAIT"
      }
     ]

(多步也是如此)

之后,您始终可以启动相同的已配置群集 例如,从一个 AirFlow 作业安排整个群集和步骤。

但如果您真的想使用 Boto3 ,我认为describe_cluster()方法可以帮助您获取整个信息并使用返回的对象来启动一个新的信息。 / p>

答案 1 :(得分:0)

无法通过命令行获取“ emr export cli”。 您应该通过“ describe-cluster”解析要克隆的参数。

请参见以下示例, https://github.com/awslabs/aws-support-tools/tree/master/EMR/Get_EMR_CLI_Export

import boto3
import json
import sys

cluster_id = sys.argv[1]
client = boto3.client('emr')
clst = client.describe_cluster(ClusterId=cluster_id)

...

awscli += ' --steps ' + '\'' + json.dumps(cli_steps) + '\''

...

awscli += ' --instance-groups ' + '\'' + json.dumps(cli_igroups) + '\''
print(awscli)

首先,它从“ describe-cluster”解析参数,并制作字符串以适合aws-cli的“ create-cluster”。