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

Posted

技术标签:

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

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

【问题讨论】:

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

【讨论】:

以上是关于使用 boto3 将现有 EMR 集群克隆到新集群中的主要内容,如果未能解决你的问题,请参考以下文章

使用 Boto3 基于 AMI 创建 EMR 集群

jar 文件的参数不正确 - 使用 Boto3 启动 EMR 集群

我们可以使用 lambda 函数克隆一个终止的 emr 集群吗?在新集群中会有任何差异吗?

如何使用 Boto 列出所有正在运行的 EMR 集群?

AWS 使用 boto3 自动缩放创建 EMR 无法正常工作

让 EMR 集群在终止时终止其 EC2 实例