2 回答
TA贡献1862条经验 获得超7个赞
Vijay建议的上述方法适用于当前正在运行的应用程序。
但似乎您的要求是获取所有应用程序。
问题:是否有任何Java API可以帮助解析和匹配使用Main类名和用户名?
请参阅 hadoop 文档 YarnClient ...这里
基本上,有哪个会得到所有的应用程序。YarnClientgetApplications
摘要 列表 get 应用程序(EnumSet 应用程序状态) 获取与集群中给定应用程序状态匹配的应用程序的报告(应用程序报告)。
您可以尝试类似这样的东西,它将定期打印所有应用程序
import org.apache.hadoop.yarn.client.api.YarnClient
public class YarnMonitor {
public static void main(String [] args) throws Exception{
SparkContext sc = new SparkContext(new SparkConf().setMaster("yarn").setAppName("Yarn Monitor"));
YarnClient yarnClient = YarnClient.createYarnClient();
YarnConfiguration yarnConf = new YarnConfiguration(SparkHadoopUtil.get().newConfiguration(sc.getConf()));
while(true){ // periodically loop and get currently running apps
yarnClient = YarnClient.createYarnClient();
List<ApplicationReport> applications = yarnClient.getApplications();
for (ApplicationReport application : applications) {
System.out.println(application.getName());
}
Thread.sleep(1000); // sleep for 1000 ms
}
}
TA贡献1817条经验 获得超6个赞
您可以在当前 spark 应用程序代码本身中获取应用程序 ID。
这里是示例(Scala)代码片段java也具有相同的api。
// create spark configuration
SparkConf conf = new SparkConf().setMaster("local");
conf.set("spark.app.name", "test");
// create a spark context
SparkContext sc = new SparkContext(conf);
// get the application id
String appId = sc.applicationId();
// print the application id
System.out.println("Application id: " + appId);
// stop the spark context
sc.stop();
请尝试这个。
添加回答
举报
