/** * launch a worker in distributed mode * * @param conf * @param sharedcontext * @param topologyId * @param supervisorId * @param port * @param workerId * @throws IOException * @pdOid 6ea369dd-5ce2-4212-864b-1f8b2ed94abb */ public void launchWorker( Map conf, IContext sharedcontext, String topologyId, String supervisorId, Integer port, String workerId, LocalAssignment assignment) throws IOException { // STORM-LOCAL-DIR/supervisor/stormdist/topologyId String stormroot = StormConfig.supervisor_stormdist_root(conf, topologyId); // STORM-LOCAL-DIR/supervisor/stormdist/topologyId/stormjar.jar String stormjar = StormConfig.stormjar_path(stormroot); // get supervisor conf Map stormConf = StormConfig.read_supervisor_topology_conf(conf, topologyId); Map totalConf = new HashMap(); totalConf.putAll(conf); totalConf.putAll(stormConf); // get classpath // String[] param = new String[1]; // param[0] = stormjar; // String classpath = JStormUtils.add_to_classpath( // JStormUtils.current_classpath(), param); // get child process parameter String stormhome = System.getProperty("jstorm.home"); long memSize = assignment.getMem(); int cpuNum = assignment.getCpu(); String childopts = getChildOpts(totalConf); childopts += getGcDumpParam(totalConf); childopts = childopts.replace("%ID%", port.toString()); childopts = childopts.replace("%TOPOLOGYID%", topologyId); if (stormhome != null) { childopts = childopts.replace("%JSTORM_HOME%", stormhome); } else { childopts = childopts.replace("%JSTORM_HOME%", "./"); } Map<String, String> environment = new HashMap<String, String>(); if (ConfigExtension.getWorkerRedirectOutput(totalConf)) { environment.put("REDIRECT", "true"); } else { environment.put("REDIRECT", "false"); } String logFileName = JStormUtils.genLogName(assignment.getTopologyName(), port); // String logFileName = topologyId + "-worker-" + port + ".log"; environment.put("LD_LIBRARY_PATH", (String) totalConf.get(Config.JAVA_LIBRARY_PATH)); StringBuilder commandSB = new StringBuilder(); try { if (this.cgroupManager != null) { commandSB.append(cgroupManager.startNewWorker(cpuNum, workerId)); } } catch (Exception e) { LOG.error("fail to prepare cgroup to workerId: " + workerId, e); return; } // commandSB.append("java -server -Xdebug // -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n "); commandSB.append("java -server "); commandSB.append(" -Xms" + memSize); commandSB.append(" -Xmx" + memSize + " "); commandSB.append(" -Xmn" + memSize / 3 + " "); commandSB.append(" -XX:PermSize=" + memSize / 16); commandSB.append(" -XX:MaxPermSize=" + memSize / 8); commandSB.append(" " + childopts); commandSB.append(" " + (assignment.getJvm() == null ? "" : assignment.getJvm())); commandSB.append(" -Djava.library.path="); commandSB.append((String) totalConf.get(Config.JAVA_LIBRARY_PATH)); commandSB.append(" -Dlogfile.name="); commandSB.append(logFileName); // commandSB.append(" -Dlog4j.ignoreTCL=true"); if (stormhome != null) { // commandSB.append(" -Dlogback.configurationFile=" + stormhome + // "/conf/cluster.xml"); commandSB.append( " -Dlog4j.configuration=File:" + stormhome + "/conf/jstorm.log4j.properties"); commandSB.append(" -Djstorm.home="); commandSB.append(stormhome); } else { // commandSB.append(" -Dlogback.configurationFile=cluster.xml"); commandSB.append(" -Dlog4j.configuration=File:jstorm.log4j.properties"); } String classpath = getClassPath(stormjar, stormhome, totalConf); String workerClassPath = (String) totalConf.get(Config.WORKER_CLASSPATH); List<String> otherLibs = (List<String>) stormConf.get(GenericOptionsParser.TOPOLOGY_LIB_NAME); StringBuilder sb = new StringBuilder(); if (otherLibs != null) { for (String libName : otherLibs) { sb.append(StormConfig.stormlib_path(stormroot, libName)).append(":"); } } workerClassPath = workerClassPath + ":" + sb.toString(); Map<String, String> policyReplaceMap = new HashMap<String, String>(); String realClassPath = classpath + ":" + workerClassPath; policyReplaceMap.put(SandBoxMaker.CLASS_PATH_KEY, realClassPath); commandSB.append(sandBoxMaker.sandboxPolicy(workerId, policyReplaceMap)); // commandSB.append(" -Dlog4j.configuration=storm.log.properties"); commandSB.append(" -cp "); // commandSB.append(workerClassPath + ":"); commandSB.append(classpath); if (!ConfigExtension.isEnableTopologyClassLoader(totalConf)) commandSB.append(":").append(workerClassPath); commandSB.append(" org.act.tstream.daemon.worker.Worker "); commandSB.append(topologyId); commandSB.append(" "); commandSB.append(supervisorId); commandSB.append(" "); commandSB.append(port); commandSB.append(" "); commandSB.append(workerId); commandSB.append(" "); commandSB.append(workerClassPath + ":" + stormjar); LOG.info("Launching worker with command: " + commandSB); LOG.info("Environment:" + environment.toString()); JStormUtils.launch_process(commandSB.toString(), environment, true); }