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:
parent
aa934616dd
commit
bca57d471f
@ -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
|
||||||
|
@ -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>
|
||||||
|
@ -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");
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user