YARN-94. Modify DistributedShell to point to main-class by default, clean up the help message, and hard-code the AM class. Contributed by Hitesh Shah.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1396226 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Vinod Kumar Vavilapalli 2012-10-09 19:40:31 +00:00
parent aa934616dd
commit bca57d471f
4 changed files with 59 additions and 27 deletions

View File

@ -55,6 +55,9 @@ Release 2.0.3-alpha - Unreleased
YARN-33. Change LocalDirsHandlerService to validate the configured local and YARN-33. Change LocalDirsHandlerService to validate the configured local and
log dirs. (Mayank Bansal via sseth) log dirs. (Mayank Bansal via sseth)
YARN-94. Modify DistributedShell to point to main-class by default, clean up
the help message, and hard-code the AM class. (Hitesh Shah via vinodkv)
OPTIMIZATIONS OPTIMIZATIONS
BUG FIXES BUG FIXES

View File

@ -82,6 +82,13 @@
<phase>test-compile</phase> <phase>test-compile</phase>
</execution> </execution>
</executions> </executions>
<configuration>
<archive>
<manifest>
<mainClass>org.apache.hadoop.yarn.applications.distributedshell.Client</mainClass>
</manifest>
</archive>
</configuration>
</plugin> </plugin>
<plugin> <plugin>
<artifactId>maven-dependency-plugin</artifactId> <artifactId>maven-dependency-plugin</artifactId>

View File

@ -119,7 +119,8 @@ public class Client extends YarnClientImpl {
// Application master jar file // Application master jar file
private String appMasterJar = ""; private String appMasterJar = "";
// Main class to invoke application master // Main class to invoke application master
private String appMasterMainClass = ""; private final String appMasterMainClass =
"org.apache.hadoop.yarn.applications.distributedshell.ApplicationMaster";
// Shell command to be executed // Shell command to be executed
private String shellCommand = ""; private String shellCommand = "";
@ -149,6 +150,9 @@ public class Client extends YarnClientImpl {
// Debug flag // Debug flag
boolean debugFlag = false; boolean debugFlag = false;
// Command line options
private Options opts;
/** /**
* @param args Command line arguments * @param args Command line arguments
*/ */
@ -157,10 +161,16 @@ public static void main(String[] args) {
try { try {
Client client = new Client(); Client client = new Client();
LOG.info("Initializing Client"); LOG.info("Initializing Client");
try {
boolean doRun = client.init(args); boolean doRun = client.init(args);
if (!doRun) { if (!doRun) {
System.exit(0); System.exit(0);
} }
} catch (IllegalArgumentException e) {
System.err.println(e.getLocalizedMessage());
client.printUsage();
System.exit(-1);
}
result = client.run(); result = client.run();
} catch (Throwable t) { } catch (Throwable t) {
LOG.fatal("Error running CLient", t); LOG.fatal("Error running CLient", t);
@ -180,6 +190,23 @@ public Client(Configuration conf) throws Exception {
super(); super();
this.conf = conf; this.conf = conf;
init(conf); init(conf);
opts = new Options();
opts.addOption("appname", true, "Application Name. Default value - DistributedShell");
opts.addOption("priority", true, "Application Priority. Default 0");
opts.addOption("queue", true, "RM Queue in which this application is to be submitted");
opts.addOption("timeout", true, "Application timeout in milliseconds");
opts.addOption("master_memory", true, "Amount of memory in MB to be requested to run the application master");
opts.addOption("jar", true, "Jar file containing the application master");
opts.addOption("shell_command", true, "Shell command to be executed by the Application Master");
opts.addOption("shell_script", true, "Location of the shell script to be executed");
opts.addOption("shell_args", true, "Command line args for the shell script");
opts.addOption("shell_env", true, "Environment for shell script. Specified as env_key=env_val pairs");
opts.addOption("shell_cmd_priority", true, "Priority for the shell command containers");
opts.addOption("container_memory", true, "Amount of memory in MB to be requested to run the shell command");
opts.addOption("num_containers", true, "No. of containers on which the shell command needs to be executed");
opts.addOption("log_properties", true, "log4j.properties file");
opts.addOption("debug", false, "Dump out debug information");
opts.addOption("help", false, "Print usage");
} }
/** /**
@ -192,7 +219,7 @@ public Client() throws Exception {
* Helper function to print out usage * Helper function to print out usage
* @param opts Parsed command line options * @param opts Parsed command line options
*/ */
private void printUsage(Options opts) { private void printUsage() {
new HelpFormatter().printHelp("Client", opts); new HelpFormatter().printHelp("Client", opts);
} }
@ -204,33 +231,14 @@ private void printUsage(Options opts) {
*/ */
public boolean init(String[] args) throws ParseException { public boolean init(String[] args) throws ParseException {
Options opts = new Options();
opts.addOption("appname", true, "Application Name. Default value - DistributedShell");
opts.addOption("priority", true, "Application Priority. Default 0");
opts.addOption("queue", true, "RM Queue in which this application is to be submitted");
opts.addOption("timeout", true, "Application timeout in milliseconds");
opts.addOption("master_memory", true, "Amount of memory in MB to be requested to run the application master");
opts.addOption("jar", true, "Jar file containing the application master");
opts.addOption("class", true, "Main class to be run for the Application Master.");
opts.addOption("shell_command", true, "Shell command to be executed by the Application Master");
opts.addOption("shell_script", true, "Location of the shell script to be executed");
opts.addOption("shell_args", true, "Command line args for the shell script");
opts.addOption("shell_env", true, "Environment for shell script. Specified as env_key=env_val pairs");
opts.addOption("shell_cmd_priority", true, "Priority for the shell command containers");
opts.addOption("container_memory", true, "Amount of memory in MB to be requested to run the shell command");
opts.addOption("num_containers", true, "No. of containers on which the shell command needs to be executed");
opts.addOption("log_properties", true, "log4j.properties file");
opts.addOption("debug", false, "Dump out debug information");
opts.addOption("help", false, "Print usage");
CommandLine cliParser = new GnuParser().parse(opts, args); CommandLine cliParser = new GnuParser().parse(opts, args);
if (args.length == 0) { if (args.length == 0) {
printUsage(opts);
throw new IllegalArgumentException("No args specified for client to initialize"); throw new IllegalArgumentException("No args specified for client to initialize");
} }
if (cliParser.hasOption("help")) { if (cliParser.hasOption("help")) {
printUsage(opts); printUsage();
return false; return false;
} }
@ -254,8 +262,6 @@ public boolean init(String[] args) throws ParseException {
} }
appMasterJar = cliParser.getOptionValue("jar"); appMasterJar = cliParser.getOptionValue("jar");
appMasterMainClass = cliParser.getOptionValue("class",
"org.apache.hadoop.yarn.applications.distributedshell.ApplicationMaster");
if (!cliParser.hasOption("shell_command")) { if (!cliParser.hasOption("shell_command")) {
throw new IllegalArgumentException("No shell command specified to be executed by application master"); throw new IllegalArgumentException("No shell command specified to be executed by application master");

View File

@ -110,6 +110,22 @@ public void testDSShell() throws Exception {
} }
@Test
public void testDSShellWithNoArgs() throws Exception {
String[] args = {};
LOG.info("Initializing DS Client with no args");
Client client = new Client(new Configuration(yarnCluster.getConfig()));
boolean exceptionThrown = false;
try {
boolean initSuccess = client.init(args);
}
catch (IllegalArgumentException e) {
exceptionThrown = true;
}
Assert.assertTrue(exceptionThrown);
}
} }