亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用主類和用戶獲取 Spark ApplicationID

如何使用主類和用戶獲取 Spark ApplicationID

撒科打諢 2022-08-17 15:35:04
我正在將Hadoop 2.0與Cloudera一起使用,并嘗試使用Java程序來檢查特定的Spark applicationID是否正在運行并采取進一步的步驟。我有觸發特定 Spark 應用程序的主類和用戶(帳戶)信息。我知道下面,但是是否有任何Java API可以幫助解析和使用Main類名和用戶名進行匹配?yarn application -list有沒有辦法通過使用另一個Java程序中的Main Class和用戶信息來獲取正在運行的spark應用程序的appramentID?[編輯]一種方法是發出以下命令:yarn application -list -appStates RUNNING | grep $application_name | grep $user | cut -f 1如果有任何Java API可以簡化,請分享。[編輯]上面的命令很好,但是我嘗試使用YarnClient,如下所示:公共類 SomeCheck {    public boolean run(String account, String appName) throws YarnException, IOException {        SparkContext sc = new SparkContext(new SparkConf().setMaster("yarn").setAppName("SomeCheck"));        YarnConfiguration conf = new YarnConfiguration(SparkHadoopUtil.get().newConfiguration(sc.getConf()));        YarnClient yarnClient = YarnClient.createYarnClient();        yarnClient.init(conf);        yarnClient.start();        EnumSet<YarnApplicationState> states =                  EnumSet.of(YarnApplicationState.ACCEPTED, YarnApplicationState.RUNNING);        List<ApplicationReport> applications = yarnClient.getApplications(states);        for (ApplicationReport application : applications) {               if ((application.getUser() == account) & (application.getName() == appName)) return true;        }        return false;    }}它指向SparkContext sc = new SparkContext(new SparkConf().setMaster("yarn").setAppName("SomeCheck"));錯誤: ERROR spark.SparkContext: Error initializing SparkContext.com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'akka.version'代碼中是否有任何不正確的內容?
查看完整描述

2 回答

?
牧羊人nacy

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

        }

    }


查看完整回答
反對 回復 2022-08-17
?
慕的地6264312

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();

請嘗試這個。


查看完整回答
反對 回復 2022-08-17
  • 2 回答
  • 0 關注
  • 242 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號