Apache Storm 之使用JAVA API远程提交Topology(非使用storm命令)

  对storm研究不少时间了,领导之前要求希望能通过xml自定义的方式生成拓扑(Topology)然后自动提交到Storm的nimbus上,目前现存的提交方式类似Hadoop,都需要将任务(Topology)达成一个jar包,使用storm jar xxxxx.jar xxxxTopology的方式显示提交,所以不满足领导要求,加之每次使用命令提交上传提交到storm集群都是繁琐的事情,经过查看源码后,使用storm隐藏的API完全可以实现以上想法。

一般而言,我们定义拓扑(Topology)都实在一个类的main方法中定义好拓扑(Topology),如下:

  public static void main(String[] args) throws Exception {
    TopologyBuilder builder = new TopologyBuilder();

    builder.setSpout("word", new TestWordSpout(), 10);
    builder.setBolt("exclaim1", new ExclamationBolt(), 3).shuffleGrouping("word");
    builder.setBolt("exclaim2", new ExclamationBolt(), 2).shuffleGrouping("exclaim1");

    Config conf = new Config();
    conf.setDebug(true);

    if (args != null && args.length > 0) {
      conf.setNumWorkers(3);

      StormSubmitter.submitTopologyWithProgressBar(args[0], conf, builder.createTopology());
    }
    else {

      LocalCluster cluster = new LocalCluster();
      cluster.submitTopology("test", conf, builder.createTopology());
      Utils.sleep(10000);
      cluster.killTopology("test");
      cluster.shutdown();
    }
  }
          以上方式,提交的时候需要将生成拓扑的(Topology)的spout和bolt都打到一个jar中,如果是maven项目可以使用maven-gpg-plugin插件来完成这个操作,但现在是通过自定义的方式,也就是默认已经实现了spout和bolt,我们只是在main方法里面随机组合自动生成拓扑(Topology),这个过程是动态的,非之前jar包静态方式。说了这么多一下为具体步骤:

    1、编写和自身业务相关的spout和bolt类,并将其打包成一个jar包,比如:storm-remote-submit-1.0-SNAPSHOT-jar-with-dependencies.jar

    2、将上述的jar包放到客户端代码能读到的任何位置,比如:d:\storm-remote-submit-1.0-SNAPSHOT-jar-with-dependencies.jar

    3、使用如下方式定义一个拓扑(Topology), 

  public static void main(String[] args) throws Exception {
    TopologyBuilder builder = new TopologyBuilder();

    builder.setSpout("word", new TestWordSpout(), 10);
    builder.setBolt("exclaim1", new ExclamationBolt(), 3).shuffleGrouping("word");
    builder.setBolt("exclaim2", new ExclamationBolt(), 2).shuffleGrouping("exclaim1");

    Config conf = new Config();
    conf.put(Config.NIMBUS_HOST,NIMBUS_HOST); //配置nimbus连接主机地址,比如:192.168.10.1
    conf.put(Config.NIMBUS_THRIFT_PORT,NIMBUS_THRIFT_PORT);//配置nimbus连接端口,默认 6627
    conf.put(Config.STORM_ZOOKEEPER_SERVERS, Arrays.asList(STORM_ZOOKEEPER_SERVERS)); //配置zookeeper连接主机地址,可以使用集合存放多个
    conf.put(Config.STORM_ZOOKEEPER_PORT,STORM_ZOOKEEPER_PORT); //配置zookeeper连接端口,默认2181
    conf.setDebug(isDebug);
    conf.setNumWorkers(3);

    //非常关键的一步,使用StormSubmitter提交拓扑时,不管怎么样,都是需要将所需的jar提交到nimbus上去,如果不指定jar文件路径,
    //storm默认会使用System.getProperty("storm.jar")去取,如果不设定,就不能提交
    System.setProperty("storm.jar","d:\\storm-remote-submit-1.0-SNAPSHOT-jar-with-dependencies.jar");
    StormSubmitter.submitTopology(name, conf, topology);
  }
    4、提交完成后,登录storm ui进行查看。






  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值