如何使用 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 地址