为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用主类和用户获取 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 关注
  • 389 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号