blob: b8ecae7122dbcb83b07bfd4dff43148d225a1b82 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hadoop.yarn.client.cli;
import java.io.PrintWriter;
import java.util.List;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.GnuParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Options;
import org.apache.hadoop.util.ToolRunner;
import org.apache.hadoop.yarn.api.records.ApplicationId;
import org.apache.hadoop.yarn.api.records.ApplicationReport;
import org.apache.hadoop.yarn.exceptions.YarnRemoteException;
import org.apache.hadoop.yarn.util.ConverterUtils;
public class ApplicationCLI extends YarnCLI {
private static final String APPLICATIONS_PATTERN = "%30s\t%20s\t%10s\t%10s\t%18s\t%18s\t%35s\n";
public static void main(String[] args) throws Exception {
ApplicationCLI cli = new ApplicationCLI();
cli.setSysOutPrintStream(System.out);
cli.setSysErrPrintStream(System.err);
int res = ToolRunner.run(cli, args);
cli.stop();
System.exit(res);
}
@Override
public int run(String[] args) throws Exception {
Options opts = new Options();
opts.addOption(STATUS_CMD, true, "Prints the status of the application.");
opts.addOption(LIST_CMD, false, "Lists all the Applications from RM.");
opts.addOption(KILL_CMD, true, "Kills the application.");
CommandLine cliParser = new GnuParser().parse(opts, args);
int exitCode = -1;
if (cliParser.hasOption(STATUS_CMD)) {
if (args.length != 2) {
printUsage(opts);
return exitCode;
}
printApplicationReport(cliParser.getOptionValue(STATUS_CMD));
} else if (cliParser.hasOption(LIST_CMD)) {
listAllApplications();
} else if (cliParser.hasOption(KILL_CMD)) {
if (args.length != 2) {
printUsage(opts);
return exitCode;
}
killApplication(cliParser.getOptionValue(KILL_CMD));
} else {
syserr.println("Invalid Command Usage : ");
printUsage(opts);
}
return 0;
}
/**
* It prints the usage of the command
*
* @param opts
*/
private void printUsage(Options opts) {
new HelpFormatter().printHelp("application", opts);
}
/**
* Lists all the applications present in the Resource Manager
*
* @throws YarnRemoteException
*/
private void listAllApplications() throws YarnRemoteException {
PrintWriter writer = new PrintWriter(sysout);
List<ApplicationReport> appsReport = client.getApplicationList();
writer.println("Total Applications:" + appsReport.size());
writer.printf(APPLICATIONS_PATTERN, "Application-Id",
"Application-Name", "User", "Queue", "State", "Final-State",
"Tracking-URL");
for (ApplicationReport appReport : appsReport) {
writer.printf(APPLICATIONS_PATTERN, appReport.getApplicationId(),
appReport.getName(), appReport.getUser(), appReport.getQueue(),
appReport.getYarnApplicationState(), appReport
.getFinalApplicationStatus(), appReport.getOriginalTrackingUrl());
}
writer.flush();
}
/**
* Kills the application with the application id as appId
*
* @param applicationId
* @throws YarnRemoteException
*/
private void killApplication(String applicationId) throws YarnRemoteException {
ApplicationId appId = ConverterUtils.toApplicationId(applicationId);
sysout.println("Killing application " + applicationId);
client.killApplication(appId);
}
/**
* Prints the application report for an application id.
*
* @param applicationId
* @throws YarnRemoteException
*/
private void printApplicationReport(String applicationId)
throws YarnRemoteException {
ApplicationReport appReport = client.getApplicationReport(ConverterUtils
.toApplicationId(applicationId));
StringBuffer appReportStr = new StringBuffer();
if (appReport != null) {
appReportStr.append("Application Report : ");
appReportStr.append("\n\tApplication-Id : ");
appReportStr.append(appReport.getApplicationId());
appReportStr.append("\n\tApplication-Name : ");
appReportStr.append(appReport.getName());
appReportStr.append("\n\tUser : ");
appReportStr.append(appReport.getUser());
appReportStr.append("\n\tQueue : ");
appReportStr.append(appReport.getQueue());
appReportStr.append("\n\tStart-Time : ");
appReportStr.append(appReport.getStartTime());
appReportStr.append("\n\tFinish-Time : ");
appReportStr.append(appReport.getFinishTime());
appReportStr.append("\n\tState : ");
appReportStr.append(appReport.getYarnApplicationState());
appReportStr.append("\n\tFinal-State : ");
appReportStr.append(appReport.getFinalApplicationStatus());
appReportStr.append("\n\tTracking-URL : ");
appReportStr.append(appReport.getOriginalTrackingUrl());
appReportStr.append("\n\tDiagnostics : ");
appReportStr.append(appReport.getDiagnostics());
} else {
appReportStr.append("Application with id '" + applicationId
+ "' doesn't exist in RM.");
}
sysout.println(appReportStr.toString());
}
}