如何以编程方式杀死风暴拓扑?
我正在使用java类向Storm集群提交拓扑,我还计划使用java类来终止拓扑。 但是根据风暴文档 ,以下命令用于终止拓扑,并且没有Java方法(这有正当理由)
storm kill {stormname}
那么从java类调用shell脚本来终止拓扑是否可以呢? 杀死拓扑的其他方法有哪些?
另外,如何获得在Storm集群中运行拓扑的状态?
要杀死拓扑,您可以尝试这样做
import backtype.storm.generated.KillOptions import backtype.storm.generated.Nimbus.Client; import backtype.storm.utils.NimbusClient import backtype.storm.utils.Utils Map conf = Utils.readStormConfig(); Client client = NimbusClient.getConfiguredClient(conf).getClient(); KillOptions killOpts = new KillOptions(); //killOpts.set_wait_secs(waitSeconds); // time to wait before killing client.killTopologyWithOpts(topology_name, killOpts); //provide topology name
获取拓扑运行的状态
Client client = NimbusClient.getConfiguredClient(conf).getClient(); List topologyList = client.getClusterInfo.get_topologies(); // loop through the list and check if the required topology name is present in the list // if not it's not running
从Storm 1.0.0开始,从nimbus.seeds
或bolt中杀死拓扑需要你通过nimbus.seeds
指定nimbus主机位置(或者如果你没有通过代码执行它,你需要指定nimbus.seeds在storm.yaml
文件):
import org.apache.storm.utils.NimbusClient; import org.apache.storm.utils.Utils; void somewhereInASpoutOrBolt() { Map conf = Utils.readStormConfig(); conf.put("nimbus.seeds", "localhost"); NimbusClient cc = NimbusClient.getConfiguredClient(conf); Nimbus.Client client = cc.getClient(); client.killTopology("MyStormTopologyName"); }
请注意,这样做也会结束您的程序。