diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/ServiceClient.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/ServiceClient.java index d1ccc4f..28a5f36 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/ServiceClient.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/ServiceClient.java @@ -898,7 +898,19 @@ public ServiceState convertState(YarnApplicationState state) { } } - public String getStatusString(String appId) + @Override + public String getStatusString(String appIdOrName) + throws IOException, YarnException { + if (appIdOrName.matches("application_[0-9]*_[0-9]*")) { + return getStatusByAppId(appIdOrName); + } else { + // if it's app name + Service status = getStatus(appIdOrName); + return status.toString(); + } + } + + private String getStatusByAppId(String appId) throws IOException, YarnException { ApplicationReport appReport = yarnClient.getApplicationReport(ApplicationId.fromString(appId)); @@ -909,8 +921,7 @@ public String getStatusString(String appId) if (StringUtils.isEmpty(appReport.getHost())) { return ""; } - ClientAMProtocol amProxy = - createAMProxy(appReport.getName(), appReport); + ClientAMProtocol amProxy = createAMProxy(appReport.getName(), appReport); GetStatusResponseProto response = amProxy.getStatus(GetStatusRequestProto.newBuilder().build()); return response.getStatus(); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/api/AppAdminClient.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/api/AppAdminClient.java index 6310178..6aba91a 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/api/AppAdminClient.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/api/AppAdminClient.java @@ -207,16 +207,16 @@ public abstract int enableFastLaunch() throws IOException, /** *
- * Get detailed status string for a YARN application. + * Get detailed app specific status string for a YARN application. *
* - * @param applicationId application id + * @param appIdOrName appId or appName * @return status string * @throws IOException IOException * @throws YarnException exception in client or server */ @Public @Unstable - public abstract String getStatusString(String applicationId) throws + public abstract String getStatusString(String appIdOrName) throws IOException, YarnException; } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/ApplicationCLI.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/ApplicationCLI.java index fb08fcd..ebd7245 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/ApplicationCLI.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/ApplicationCLI.java @@ -289,28 +289,39 @@ public int run(String[] args) throws Exception { } if (cliParser.hasOption(STATUS_CMD)) { - if (hasAnyOtherCLIOptions(cliParser, opts, STATUS_CMD)) { + if (hasAnyOtherCLIOptions(cliParser, opts, STATUS_CMD, APP_TYPE_CMD)) { printUsage(title, opts); return exitCode; } if (title.equalsIgnoreCase(APPLICATION) || title.equalsIgnoreCase(APP)) { - ApplicationReport report = printApplicationReport(cliParser - .getOptionValue(STATUS_CMD)); - if (report == null) { - exitCode = -1; + String appIdOrName = cliParser.getOptionValue(STATUS_CMD); + ApplicationReport report; + if (appIdOrName.matches("application_[0-9]*_[0-9]*")) { + // it's app Id, print generic yarn report and app specific report + report = printApplicationReport(appIdOrName); + if (report == null) { + exitCode = -1; + } else { + exitCode = 0; + String appType = report.getApplicationType(); + try { + AppAdminClient client = + AppAdminClient.createAppAdminClient(appType, getConf()); + sysout.println("Detailed Application Specific Status :"); + sysout.println(client.getStatusString(appIdOrName)); + } catch (IllegalArgumentException e) { + // app type does not have app admin client implementation + } + } } else { + // it's an app name, only get app specific report, if app-type is not + // provided, assume it is yarn-service type + AppAdminClient client = AppAdminClient + .createAppAdminClient(getSingleAppTypeFromCLI(cliParser), + getConf()); + sysout.println(client.getStatusString(appIdOrName)); exitCode = 0; - String appType = report.getApplicationType(); - try { - AppAdminClient client = AppAdminClient.createAppAdminClient(appType, - getConf()); - sysout.println("Detailed Application Status :"); - sysout.println(client.getStatusString(cliParser.getOptionValue( - STATUS_CMD))); - } catch (IllegalArgumentException e) { - // app type does not have app admin client implementation - } } } else if (title.equalsIgnoreCase(APPLICATION_ATTEMPT)) { exitCode = printApplicationAttemptReport(cliParser