Alien-XGBoost
view release on metacpan or search on metacpan
xgboost/dmlc-core/tracker/yarn/src/main/java/org/apache/hadoop/yarn/dmlc/ApplicationMaster.java view on Meta::CPAN
success = finishedTasks.size() == numTasks;
LOG.info("Application completed. Stopping running containers");
diagnostics = "Diagnostics." + ", num_tasks" + this.numTasks
+ ", finished=" + this.finishedTasks.size() + ", failed="
+ this.killedTasks.size() + "\n" + this.abortDiagnosis;
nmClient.stop();
LOG.info(diagnostics);
} catch (Exception e) {
diagnostics = e.toString();
}
rmClient.unregisterApplicationMaster(
success ? FinalApplicationStatus.SUCCEEDED
: FinalApplicationStatus.FAILED, diagnostics,
appTrackerUrl);
if (!success)
throw new Exception("Application not successful");
}
/**
* check if the job finishes
*
* @return whether we finished all the jobs
*/
private synchronized boolean doneAllJobs() {
return pendingTasks.size() == 0 && runningTasks.size() == 0;
}
/**
* submit tasks to request containers for the tasks
*
* @param tasks
* a collection of tasks we want to ask container for
*/
private synchronized void submitTasks(Collection<TaskRecord> tasks) {
for (TaskRecord r : tasks) {
Resource resource = Records.newRecord(Resource.class);
if (r.taskRole == "server") {
resource.setMemory(serverMemoryMB);
resource.setVirtualCores(serverCores);
} else {
resource.setMemory(workerMemoryMB);
resource.setVirtualCores(workerCores);
}
Priority priority = Records.newRecord(Priority.class);
priority.setPriority(this.appPriority);
r.containerRequest = new ContainerRequest(resource, null, null,
priority);
rmClient.addContainerRequest(r.containerRequest);
pendingTasks.add(r);
}
}
private synchronized void launchDummyTask(Container container){
ContainerLaunchContext ctx = Records.newRecord(ContainerLaunchContext.class);
String new_command = "./launcher.py";
String cmd = new_command + " 1>"
+ ApplicationConstants.LOG_DIR_EXPANSION_VAR + "/stdout"
+ " 2>" + ApplicationConstants.LOG_DIR_EXPANSION_VAR
+ "/stderr";
ctx.setCommands(Collections.singletonList(cmd));
ctx.setTokens(setupTokens());
ctx.setLocalResources(this.workerResources);
synchronized (this){
this.nmClient.startContainerAsync(container, ctx);
}
}
/**
* launch the task on container
*
* @param container
* container to run the task
* @param task
* the task
*/
private void launchTask(Container container, TaskRecord task) {
task.container = container;
task.containerRequest = null;
ContainerLaunchContext ctx = Records
.newRecord(ContainerLaunchContext.class);
String cmd =
// use this to setup CLASSPATH correctly for libhdfs
this.command + " 1>"
+ ApplicationConstants.LOG_DIR_EXPANSION_VAR + "/stdout"
+ " 2>" + ApplicationConstants.LOG_DIR_EXPANSION_VAR
+ "/stderr";
ctx.setCommands(Collections.singletonList(cmd));
// TODO: token was not right
ctx.setTokens(setupTokens());
LOG.info(workerResources);
ctx.setLocalResources(this.workerResources);
// setup environment variables
boolean isWindows = System.getProperty("os.name").startsWith("Windows");
// setup class path, this is kind of duplicated, ignoring
String classPathStr = isWindows? "%CLASSPATH%" : "${CLASSPATH}";
StringBuilder cpath = new StringBuilder(classPathStr
+ File.pathSeparatorChar
+ "./*");
for (String c : conf.getStrings(
YarnConfiguration.YARN_APPLICATION_CLASSPATH,
YarnConfiguration.DEFAULT_YARN_APPLICATION_CLASSPATH)) {
if (isWindows) c = c.replace('\\', '/');
String[] arrPath = c.split("" + File.pathSeparatorChar);
for (String ps : arrPath) {
if (ps.endsWith("*.jar")
|| ps.endsWith("*")
|| ps.endsWith("/")) {
ps = ps.substring(0, ps.lastIndexOf('*'));
if (ps.startsWith("$") || ps.startsWith("%")) {
String[] arr =ps.split("/", 2);
if (arr.length != 2) continue;
try {
String vname = isWindows ?
arr[0].substring(1, arr[0].length() - 1) :
arr[0].substring(1);
String vv = System.getenv(vname);
if (isWindows) vv = vv.replace('\\', '/');
ps = vv + '/' + arr[1];
} catch (Exception e){
continue;
}
}
File dir = new File(ps);
if (dir.isDirectory()) {
for (File f: dir.listFiles()) {
if (f.isFile() && f.getPath().endsWith(".jar")) {
cpath.append(File.pathSeparatorChar);
cpath.append(ps + '/' + f.getName());
}
}
}
cpath.append(File.pathSeparatorChar);
cpath.append(ps + '/');
} else {
cpath.append(File.pathSeparatorChar);
cpath.append(ps.trim());
}
}
}
// already use hadoop command to get class path in worker, maybe a
// better solution in future
env.put("CLASSPATH", cpath.toString());
// setup LD_LIBARY_PATH path for libhdfs
String oldLD_LIBRARY_PATH = System.getenv("LD_LIBRARY_PATH");
env.put("LD_LIBRARY_PATH",
( run in 2.541 seconds using v1.01-cache-2.11-cpan-d8267643d1d )