blob: 0eb930eb18266ae0753515c54d9689903417c660 [file] [log] [blame]
/*
* Copyright 2009-2010 by The Regents of the University of California
* Licensed 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 from
*
* 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 edu.uci.ics.hyracks.yarn.client;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.yarn.api.ApplicationConstants;
import org.apache.hadoop.yarn.api.records.ContainerLaunchContext;
import org.apache.hadoop.yarn.api.records.LocalResource;
import org.apache.hadoop.yarn.conf.YarnConfiguration;
import org.kohsuke.args4j.CmdLineParser;
import org.kohsuke.args4j.Option;
import edu.uci.ics.hyracks.yarn.common.protocols.clientrm.YarnApplication;
import edu.uci.ics.hyracks.yarn.common.protocols.clientrm.YarnClientRMConnection;
import edu.uci.ics.hyracks.yarn.common.resources.LocalResourceHelper;
import edu.uci.ics.hyracks.yarn.common.resources.ResourceHelper;
public class LaunchHyracksApplication {
private final Options options;
private LaunchHyracksApplication(Options options) {
this.options = options;
}
private void run() throws Exception {
Configuration conf = new Configuration();
YarnConfiguration yconf = new YarnConfiguration(conf);
YarnClientRMConnection crmc = new YarnClientRMConnection(yconf);
YarnApplication app = crmc.createApplication(options.appName);
ContainerLaunchContext clCtx = app.getContainerLaunchContext();
Map<String, LocalResource> localResources = new HashMap<String, LocalResource>();
File amZipFile = new File(System.getProperty("basedir") + "/hyracks-yarn-am/hyracks-yarn-am.zip");
localResources.put("archive", LocalResourceHelper.createArchiveResource(conf, amZipFile));
clCtx.setLocalResources(localResources);
String command = "./archive/bin/hyracks-yarn-am 1>" + ApplicationConstants.LOG_DIR_EXPANSION_VAR + "/stdout"
+ " 2>" + ApplicationConstants.LOG_DIR_EXPANSION_VAR + "/stderr";
List<String> commands = new ArrayList<String>();
commands.add(command);
clCtx.setCommands(commands);
clCtx.setResource(ResourceHelper.createMemoryCapability(options.amMemory));
app.submit();
}
public static void main(String[] args) throws Exception {
Options options = new Options();
CmdLineParser parser = new CmdLineParser(options);
try {
parser.parseArgument(args);
} catch (Exception e) {
parser.printUsage(System.err);
return;
}
new LaunchHyracksApplication(options).run();
}
private static class Options {
@Option(name = "-application-name", required = true, usage = "Application Name")
String appName;
@Option(name = "-am-host", required = false, usage = "Application master host name (default: *). Currently has NO effect")
String amHostName = "*";
@Option(name = "-am-memory", required = false, usage = "Application Master memory requirements")
int amMemory = 128;
@Option(name = "-workers", required = true, usage = "Number of worker containers")
int nWorkers;
@Option(name = "-worker-memory", required = true, usage = "Amount of memory to provide to each worker")
int workerMemory;
@Option(name = "-extra-jars", required = false, usage = "Other jars that need to be added to the classpath")
String extraJars = "";
}
}