你可以使用 Python 的 subprocess 模块来执行命令行,并捕获其输出。以下是一段示例代码,用于获取 YARN 应用程序中名称包含 jupiterDev 的应用程序数量:
import subprocess
# 构造要执行的命令
command = "yarn application -list | grep jupiterDev | wc -l"
# 执行命令并捕获输出
try:
output = subprocess.check_output(command, shell=True)
count = int(output.strip())
print("Number of JupiterDev applications: {}".format(count))
except subprocess.CalledProcessError as e:
print("Command '{}' returned non-zero exit status {}".format(e.cmd, e.returncode))
该代码会执行 yarn application -list | grep jupiterDev | wc -l 命令,并将其输出转换为整数类型的变量 count。最后输出包含 JupiterDev 应用程序数量的字符串。如果命令返回非零退出码,则会打印错误信息。
是的,同时你可以使用以下 REST API 获取 YARN 应用程序列表:
GET http://<yarn-resourcemanager-host>:8088/ws/v1/cluster/apps
其中, 是 YARN ResourceManager 所在的机器的主机名或 IP 地址。
该 REST API 将返回一个 JSON 格式的响应,其中包含所有正在运行的 YARN 应用程序的详细信息,例如应用程序 ID、名称、用户、队列、状态等。你可以根据自己的需要来解析和处理这些信息。
# -*- coding: utf-8 -*-
# author:laidefa
import requests
import time
# 定义参数
yarn_application_url="http://kafka1:8088/ws/v1/cluster/apps?states=RUNNING"
# 访问prometheus API获取数据
timestamp= int(time.time())
res = requests.get(yarn_application_url)
# 解析响应中包含的 JSON 数据
if res.ok:
data = res.json()
count = data["apps"]["app"]
print("Number of running applications: {}".format(len(count)))
else:
print("Request failed with status code {}".format(res.status_code))
该代码会向 YARN ResourceManager 发送一个 HTTP GET 请求,获取所有状态为 RUNNING 的 YARN 应用程序的详细信息。然后,它会解析响应中包含的 JSON 数据,并计算 RUNNING 应用程序的数量。最后输出包含 RUNNING 应用程序数量的字符串。
运行结果:
Number of running applications: 2