【问题标题】:Cloning existing EMR cluster into a new one using boto3使用 boto3 将现有 EMR 集群克隆到新集群中
【发布时间】:2017-10-12 07:35:33
【问题描述】:

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

【问题讨论】:

  • 请阅读这两个问题。它们是不同的。
  • @AmeyDahale 你有答案吗?似乎这应该是 boto3 克隆现有 EMR 的流行功能。
  • 我保留了一个包含所有 EMR 详细信息的静态配置文件,并使用 boto3 的 run_job_flow 来重用现有 EMR 的属性。 /我想有 boto3 功能来克隆现有的 EMR 会很好。
  • 我创建了这个问题(尽管是在 java sdk 上),因为我看到这是一个常见的请求:github.com/aws/aws-sdk-java/issues/2002

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


【解决方案1】:

我可以向您推荐的是,使用 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() 方法可以帮助你获取全部信息并使用返回的对象来启动一个新对象。

【讨论】:

    【解决方案2】:

    无法通过命令行获取“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”的字符串。

    【讨论】:

      猜你喜欢
      • 2019-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-08
      相关资源
      最近更新 更多