Topology结构图如下:
1.Topology的启动和关闭
1)启动Topology:
将编辑好的jar文件拷到一个文件目录下,如/cloud/storm/jar
storm jar /cloud/storm/jar/demo.jar org.me.MyTopology arg1 arg2arg3
其中,demo.jar是包含Topology实现代码的jar包,org.me.MyTopology的main方法是Topology的入口, arg1、arg2和arg3为org.me.MyTopology执行时需要传入的参数。
2)停止Storm Topology:
storm kill allmycode //将allmycode Topology杀掉
storm kill {toponame}杀掉运行的任务
其中,{toponame}为Topology提交到Storm集群时指定的Topology任务名称。
2.结合代码和StormUI理解Topology不同阶段的配置和运行状况
部分代码:
//创建一个TopologyBuilder对象
TopologyBuilder builder = new TopologyBuilder();
//设置TopologyBuilder对象的Spout的id为random,将自定义的Spot对象传递给TopologyBuilder,并设置由两个线程执行
builder.setSpout("random", new RandomWordSpout(), 2);
//注意下面被注掉的代码和未注掉的代码的区别,被注掉的代码没有设置Bolt的任务个数,默认一个线程执行一个Task任务 //此处设置为8说明一个线程执行2个Bolt Task任务
//builder.setBolt("transfer", new TransferBolt(), 4).shuffleGrouping("random");
//设置Bolt的id为transfer,将id为random的Spout数据源传递给该Bolt对象,TransferBolt也是自定义对象
builder.setBolt("transfer", new TransferBolt(), 4).shuffleGrouping("random").setNumTasks(8);
//设置该Bolt对象获取的数据来由id为transfer的Bolt提供,设置任务数为8
builder.setBolt("writer", new WriterBolt(), 4).fieldsGrouping("transfer", new Fields("word")).setNumTasks(8);
Config conf = new Config();
conf.setNumWorkers(4);//设置创建4个worker
//conf.setNumAckers(0);//Acker负责监听任务执行的过程
conf.setDebug(true);
StormSubmitter.submitTopology("life-cycle", conf, builder.createTopology());//提交一个名字为life-cycle的Topology