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

Posted

技术标签:

【中文标题】如何使用 Boto 列出所有正在运行的 EMR 集群?【英文标题】:How do I list all running EMR clusters using Boto? 【发布时间】:2017-05-09 18:34:10 【问题描述】:

如何使用 boto 列出我的 aws 帐户中所有正在运行的集群?使用命令行我可以使用它们:

aws emr list-clusters --profile my-profile --region us-west-2 --active

但是我想用 boto3 做同样的事情。但是,以下代码不返回任何集群:

import boto3

session = boto3.Session(profile_name='my-profile')

client = session.client('emr', region_name= 'us-west-2')

response = client.list_clusters(
    ClusterStates=['RUNNING']
)

print response

结果:

u'Clusters': [], 'ResponseMetadata': 'RetryAttempts': 0, 'HTTPStatusCode': 200, 'RequestId': '577f3961-bdc80772f266', 'HTTPHeaders': 'x-amzn-requestid': '577f3961-34e5-11e7-a12a-bdc80772f266', 'date': 'Tue, 09 May 2017 18:28:47 GMT', 'content-length': '15', 'content-type': 'application/x-amz-json-1.1'

【问题讨论】:

【参考方案1】:

这是分页器解决方案。

import boto3

boto3 = boto3.session.Session(region_name='ap-northeast-2')
emr = boto3.client('emr')

page_iterator = emr.get_paginator('list_clusters').paginate(
    ClusterStates=['RUNNING','WAITING']
)

for page in page_iterator:
    for item in page['Clusters']:
        print(item['Id'])

结果是

j-21*****
j-3S*****

【讨论】:

【参考方案2】:

集群最初处于 Waiting 状态,当有作业针对集群运行时,它会变为 Running 状态。在您的情况下,如果集群中至少有 1 个作业正在运行,它只会返回一个 Id。

改成下面这样:

ClusterStates=['WAITING', 'RUNNING'] 

【讨论】:

【参考方案3】:

来自文档:

提供此 AWS 账户可见的所有集群的状态。

意味着您可能无权使用您提供的会话凭据列出这些集群。尝试使用 aws cli 正在使用的凭据,看看它是否有效。

【讨论】:

my-profile 在 aws cli 命令中使用时返回集群列表,boto3 中的相同配置文件不返回任何内容 我的意思是:当您在 python 中执行以下操作时:import boto3 iamclient = boto3.client('iam') iamclient.get_user() 它返回与控制台中的以下内容相同:aws iam get-user【参考方案4】:

试试这个

import boto3
client = boto3.client("emr")
running_clust = client.list_clusters(ClusterStates=['WAITING'])

print(running_clust)

使用“WAITING”、“RUNNING”、“STARTING”等

列表项

【讨论】:

【参考方案5】:

它只会返回 50 条记录,如果您有更多记录,那么您需要使用 Marker 来跟踪多个 listClusters 调用中集群列表的分页,然后您可以过滤“某事”之类的名称

【讨论】:

以上是关于如何使用 Boto 列出所有正在运行的 EMR 集群?的主要内容,如果未能解决你的问题,请参考以下文章

正在寻找将 aws pig 步骤注入已经运行的 emr 的 boto3 python 示例?

如何使用纯 python/boto 访问 EMR master 私有 ip 地址

如何在 EMR zeppelin 上安装 boto3

如何列出所有未使用的弹性IP并使用boto3释放它们

您如何使用 boto3(或其他方式)在 emr 上自动化 pyspark 作业?

如何使 Pyspark 脚本在 Amazon EMR 上运行以识别 boto3 模块?它说找不到模块