2 回答

TA貢獻1862條經驗 獲得超7個贊
Vijay建議的上述方法適用于當前正在運行的應用程序。
但似乎您的要求是獲取所有應用程序。
問題:是否有任何Java API可以幫助解析和匹配使用Main類名和用戶名?
請參閱 hadoop 文檔 YarnClient ...這里
基本上,有哪個會得到所有的應用程序。YarnClient
getApplications
摘要 列表 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();
請嘗試這個。
添加回答
舉報