List of usage examples for org.apache.hadoop.yarn.server.nodemanager.containermanager.container Container handle
void handle(T event);
From source file:com.github.sakserv.minicluster.yarn.InJvmContainerExecutor.java
License:Apache License
/** * Will launch containers within the same JVM as this Container Executor. It * will do so by: - extracting Container's class name and program arguments * from the launch script (e.g., launch_container.sh) - Creating an isolated * ClassLoader for each container - Calling doLaunchContainer(..) method to * launch Container// w w w.j a va2s . c o m */ private int doLaunch(Container container, Path containerWorkDir) throws Exception { Map<String, String> environment = container.getLaunchContext().getEnvironment(); EnvironmentUtils.putAll(environment); Set<URL> additionalClassPathUrls = this.filterAndBuildUserClasspath(container); ExecJavaCliParser javaCliParser = this.createExecCommandParser(containerWorkDir.toString()); UserGroupInformation.setLoginUser(null); try { // create Isolated Class Loader for each container and set it as context // class loader URLClassLoader containerCl = new URLClassLoader( additionalClassPathUrls.toArray(additionalClassPathUrls.toArray(new URL[] {})), null); Thread.currentThread().setContextClassLoader(containerCl); String containerLauncher = javaCliParser.getMain(); Class<?> containerClass = Class.forName(containerLauncher, true, containerCl); Method mainMethod = containerClass.getMethod("main", new Class[] { String[].class }); mainMethod.setAccessible(true); String[] arguments = javaCliParser.getMainArguments(); this.doLaunchContainer(containerClass, mainMethod, arguments); } catch (Exception e) { logger.error("Failed to launch container " + container, e); container.handle(new ContainerDiagnosticsUpdateEvent(container.getContainerId(), e.getMessage())); return -1; } finally { logger.info("Removing symlinks"); this.cleanUp(); } return 0; }
From source file:com.hortonworks.minicluster.InJvmContainerExecutor.java
License:Apache License
/** * Will launch containers within the same JVM as this Container Executor. It * will do so by: - extracting Container's class name and program arguments * from the launch script (e.g., launch_container.sh) - Creating an isolated * ClassLoader for each container - Calling doLaunchContainer(..) method to * launch Container/*ww w . jav a 2 s . co m*/ */ private int doLaunch(Container container, Path containerWorkDir) { Map<String, String> environment = container.getLaunchContext().getEnvironment(); EnvironmentUtils.putAll(environment); Set<URL> additionalClassPathUrls = this.filterAndBuildUserClasspath(container); ExecJavaCliParser javaCliParser = this.createExecCommandParser(containerWorkDir.toString()); UserGroupInformation.setLoginUser(null); try { // create Isolated Class Loader for each container and set it as context // class loader URLClassLoader containerCl = new URLClassLoader( additionalClassPathUrls.toArray(additionalClassPathUrls.toArray(new URL[] {})), null); Thread.currentThread().setContextClassLoader(containerCl); String containerLauncher = javaCliParser.getMain(); Class<?> containerClass = Class.forName(containerLauncher, true, containerCl); Method mainMethod = containerClass.getMethod("main", new Class[] { String[].class }); mainMethod.setAccessible(true); String[] arguments = javaCliParser.getMainArguments(); this.doLaunchContainer(containerClass, mainMethod, arguments); } catch (Exception e) { logger.error("Failed to launch container " + container, e); container.handle(new ContainerDiagnosticsUpdateEvent(container.getContainerId(), e.getMessage())); return -1; } finally { logger.info("Removing symlinks"); this.cleanUp(); } return 0; }
From source file:oz.hadoop.yarn.test.cluster.InJvmContainerExecutor.java
License:Apache License
/** * *//* ww w . ja v a 2 s . c o m*/ private int doLaunch(Container container, Path containerWorkDir) { Set<Path> paths = this.getIncomingClassPathEntries(container); String currentClassPath = System.getProperty("java.class.path"); final Set<URL> additionalClassPathUrls = new HashSet<>(); if (logger.isDebugEnabled()) { logger.debug("Building additional classpath for the container: " + container); } List<String> ae = Arrays.asList(additionalClassPathExclusions); // for logging purposes for (Path path : paths) { String resourceName = path.getName(); if (currentClassPath.contains(resourceName)) { if (logger.isDebugEnabled()) { logger.debug("\t skipping " + resourceName + ". Already in the classpath."); } } else { if (!this.shouldExclude(path.getName())) { if (logger.isDebugEnabled()) { logger.debug("\t adding " + resourceName + " to the classpath"); } try { additionalClassPathUrls.add(path.toUri().toURL()); } catch (Exception e) { throw new IllegalArgumentException(e); } } else { if (logger.isDebugEnabled()) { logger.debug( "Excluding " + path.getName() + " based on 'additionalClassPathExclusions': " + ae); } } } } Map<String, String> environment = container.getLaunchContext().getEnvironment(); try { URLClassLoader cl = new URLClassLoader(additionalClassPathUrls.toArray(new URL[] {})); String containerLauncher = environment.get("CONTAINER_LAUNCHER"); Class<?> amClass = Class.forName(containerLauncher, true, cl); Method mainMethod = amClass.getMethod("main", new Class[] { String[].class }); mainMethod.setAccessible(true); String mainArgs = environment.get("CONTAINER_ARG"); String[] arguments = new String[] { mainArgs, containerLauncher }; mainMethod.invoke(null, (Object) arguments); } catch (Exception e) { logger.error("Failed to launch container " + container, e); container.handle(new ContainerDiagnosticsUpdateEvent(container.getContainerId(), e.getMessage())); return -1968; } return 0; }