Package backtype.storm

Source Code of backtype.storm.LocalUtils

package backtype.storm;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import org.apache.log4j.Logger;

import backtype.storm.Config;
import backtype.storm.messaging.IContext;
import backtype.storm.utils.Utils;

import com.alibaba.jstorm.daemon.nimbus.DefaultInimbus;
import com.alibaba.jstorm.daemon.nimbus.NimbusServer;
import com.alibaba.jstorm.daemon.supervisor.Supervisor;
import com.alibaba.jstorm.message.netty.NettyContext;
import com.alibaba.jstorm.zk.Factory;
import com.alibaba.jstorm.zk.Zookeeper;

public class LocalUtils {

  public static Logger LOG = Logger.getLogger(LocalUtils.class);

  public static LocalClusterMap prepareLocalCluster() {
    LocalClusterMap state = new LocalClusterMap();
    try {
      List<String> tmpDirs = new ArrayList();

      String zkDir = getTmpDir();
      tmpDirs.add(zkDir);
      Factory zookeeper = startLocalZookeeper(zkDir);
      Map conf = getLocalConf(zookeeper.getZooKeeperServer()
          .getClientPort());

      String nimbusDir = getTmpDir();
      tmpDirs.add(nimbusDir);
      Map nimbusConf = deepCopyMap(conf);
      nimbusConf.put(Config.STORM_LOCAL_DIR, nimbusDir);
      NimbusServer instance = new NimbusServer();

      Map supervisorConf = deepCopyMap(conf);
      String supervisorDir = getTmpDir();
      tmpDirs.add(supervisorDir);
      supervisorConf.put(Config.STORM_LOCAL_DIR, supervisorDir);
      Supervisor supervisor = new Supervisor();
      IContext context = getLocalContext(supervisorConf);

      state.setNimbusServer(instance);
      state.setNimbus(instance.launcherLocalServer(nimbusConf,
          new DefaultInimbus()));
      state.setZookeeper(zookeeper);
      state.setConf(conf);
      state.setTmpDir(tmpDirs);
      state.setSupervisor(supervisor
          .mkSupervisor(supervisorConf, context));
      return state;
    } catch (Exception e) {
      LOG.error("prepare cluster error!", e);
      state.clean();

    }
    return null;
  }

  private static Factory startLocalZookeeper(String tmpDir) {
    for (int i = 2000; i < 65535; i++) {
      try {
        return Zookeeper.mkInprocessZookeeper(tmpDir, i);
      } catch (Exception e) {
        LOG.error("fail to launch zookeeper at port: " + i, e);
      }
    }
    throw new RuntimeException(
        "No port is available to launch an inprocess zookeeper.");
  }

  private static String getTmpDir() {
    return System.getProperty("java.io.tmpdir") + File.separator
        + UUID.randomUUID();
  }

  private static Map getLocalConf(int port) {
    List<String> zkServers = new ArrayList<String>(1);
    zkServers.add("localhost");
    Map conf = Utils.readStormConfig();
    conf.put(Config.STORM_CLUSTER_MODE, "local");
    conf.put(Config.STORM_ZOOKEEPER_SERVERS, zkServers);
    conf.put(Config.STORM_ZOOKEEPER_PORT, port);
    conf.put(Config.TOPOLOGY_SKIP_MISSING_KRYO_REGISTRATIONS, true);
    conf.put(Config.ZMQ_LINGER_MILLIS, 0);
    conf.put(Config.TOPOLOGY_ENABLE_MESSAGE_TIMEOUTS, false);
    conf.put(Config.TOPOLOGY_TRIDENT_BATCH_EMIT_INTERVAL_MILLIS, 50);
    return conf;
  }

  private static IContext getLocalContext(Map conf) {
    if (!(Boolean) conf.get(Config.STORM_LOCAL_MODE_ZMQ)) {
      IContext result = new NettyContext();
      result.prepare(conf);
      return result;
    }
    return null;
  }

  private static Map deepCopyMap(Map map) {
    return new HashMap(map);
  }
}
TOP

Related Classes of backtype.storm.LocalUtils

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.