我正在使用带有 Cloudera 的 Hadoop 2.0 并尝试使用 Java 程序来检查特定的 Spark applicationID 是否正在运行并采取进一步的步骤。
我有触发特定 Spark 应用程序的主类和用户(帐户)信息。
我知道以下内容,但是否有任何 Java API 可以帮助使用 Main 类名和用户名进行解析和匹配?
yarn application -list
有什么方法可以通过在另一个 Java 程序中使用 Main Class 和用户信息来获取正在运行的 spark 应用程序的 applicationID 吗?
[编辑] 一种方法是发出以下命令:
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'
代码中有什么不正确的吗?