【问题标题】:AWS EMR: Looking for AWS EMR command to terminate cluster from Jupyter EMR NotebookAWS EMR:寻找 AWS EMR 命令以从 Jupyter EMR Notebook 终止集群
【发布时间】:2020-12-21 20:20:13
【问题描述】:

我的用例是:我在企业环境中连接到 AWS EMR 集群的 AWS EMR Notebook(Python/PySpark/Spark 内核)中处理敏感数据(因此权限有限)。有时,我将许多单元格排队,这些单元格需要不同的时间才能完成。在停止我的笔记本并终止我的集群之前,我不想一直监控我的笔记本等待单元完成,而是能够排队一个终止 AWS EMR 集群的单元。

为此,根据阅读其他 SO 帖子/文档,我需要我的 cluster-id。看来,要找到它,我需要一个实例 ID。

以下代码适用于我:

!wget -q -O - http://169.254.169.254/latest/meta-data/instance-id

但由于找不到命令或权限被拒绝问题,我无法使以下这些行工作。

!aws emr list-clusters --active --query "Clusters[*].{Name:Name}" --output text
You must specify a region. You can also configure your region by running "aws configure".

我正在寻找一个简单的命令或一组命令,我可以将它们放入一个单元中并运行以终止我的笔记本所连接的集群。我的工作流程是:在每个工作日开始时,使用新名称创建一个新集群,并在工作日结束时终止该集群。鉴于此,我希望每次集群名称更改时都不必更改命令。如果可能的话,我还想避免运行aws configure

参考文献

AWS CLI EMR get Master node Instance ID and tag it

List all "Active" EMR cluster using Boto3

Get AWS EMR Cluster ID from Name

【问题讨论】:

    标签: amazon-web-services jupyter-notebook


    【解决方案1】:

    这适用于 EMR Notebook 中的 emr-5.30.1:

    import os
    emr_cluster_id = os.environ.get('EMR_CLUSTER_ID')
    emr_step_id = os.environ.get('EMR_STEP_ID')
    

    为了安全起见,如果你想在 EMR_CLUSTER_ID 未定义的情况下引发异常,那么你可以使用这个:

    emr_cluster_id = os.environ['EMR_CLUSTER_ID']
    

    有关其他有用的变量,请参阅 Spark History 服务器环境选项卡。

    然后要终止您的集群,以下应该可以工作(未经测试)。

    sc.install_pypi_package("boto3")
    
    import boto3
    client = boto3.client('emr')
    
    response = client.terminate_job_flows(
        JobFlowIds=[emr_cluster_id]
    )
    

    【讨论】: