今天博主遇到了一个问题,就是将Storm 设置成本地模式后,将 Storm 的包打压成jar , 提交上去。 这时候通过 Storm ui 启动 监控界面。 但是没有查看到 Topology ,应该是本地模式的锅,我将模式切换成集群模式就能在监控界面上看到Topology了。
下面对 集群模式 与 本地模式的 设置代码 进行下粘贴, 留作备忘
项目代码地址: http://pan.baidu.com/s/1c1XSdpA
Storm 做为一个分布式的计算模块,支持 本地模式 与 集群模式
本地模式与集群模式 设置在Topology 的main 函数中
本地模式
//本地模式:本地提交
LocalCluster cluster = new LocalCluster();
cluster.submitTopology("firstTopo", conf, builder.createTopology());
Utils.sleep(100000);
cluster.killTopology("firstTopo");
cluster.shutdown()
集群模式
//集群模式:集群提交
StormSubmitter.submitTopology("firstTopo", conf, builder.createTopology());
当使用StormSubmitter时,不能在代码中控制集群,这和LocalCluster是不一样的。
Topology的名字必须具有唯一性。
全部的完整代码:
package count;
import org.apache.storm.Config;
import org.apache.storm.StormSubmitter;
import org.apache.storm.topology.TopologyBuilder;
//本地模式需要
//import org.apache.storm.utils.Utils;
//import org.apache.storm.LocalCluster;
public class FirstTopo {
public static void main(String[] args) throws Exception {
TopologyBuilder builder = new TopologyBuilder();
builder.setSpout("spout", new RandomSpout());
builder.setBolt("bolt", new SenqueceBolt()).shuffleGrouping("spout");
Config conf = new Config();
conf.setDebug(false);
if (args != null && args.length > 0) {
conf.setNumWorkers(3);
StormSubmitter.submitTopology(args[0], conf, builder.createTopology());
} else {
// //本地模式:本地提交
// LocalCluster cluster = new LocalCluster();
// cluster.submitTopology("firstTopo", conf, builder.createTopology());
// Utils.sleep(100000);
// cluster.killTopology("firstTopo");
// cluster.shutdown();
//集群模式:集群提交
StormSubmitter.submitTopology("firstTopo", conf, builder.createTopology());
}
}
}
额外拓展
本地模式(Local mode)
本地模式在进程中模拟了一个Storm集群,用于开发和测试Topology。在本地模式下运行Topology类似于在集群上运行Topology。
只需使用LocalCluster类就可以创建一个进程内的集群,例如:
- import backtype.storm.LocalCluster;
- LocalCluster cluster = new LocalCluster();
然后,可以使用LocalCluster对象的submitTopology方法来提交Topology。就像在StormSubmitter中相应的方法一样,submitTopology方法需要一个名字、一个Topology配置和Topology对象。然后,你可以使用killTopology方法,将Topology名称作为参数,杀死一个Topology。
关闭一个本地集群,只需要简单地调用:
- cluster.shutdown();
1. 常见的本地模式的配置
acktype.storm.Config类用来配置Storm,它的继承关系如下:
- java.lang.Object
- └java.util.AbstractMap<K,V>
- └java.util.HashMap<java.lang.String,java.lang.Object>
- └backtype.storm.Config
- All Implemented Interfaces:
- java.io.Serializable, java.lang.Cloneable, java.util.Map<java.lang.String,
- java.lang.Object>
2. Config.TOPOLOGY_MAX_TASK_PARALLELISM
这个配置项是组件产生线程数量的上限。通常生产环境的拓扑并行度很大(数以百计的线程),可以尝试在本地模式下测试拓扑,找出不合理负荷的地方。这个配置项使你可以很容易地控制并行度。
3. Config.TOPOLOGY_DEBUG
当设置为true时,每次从Spout或者Bolt发送元组,Storm都会写进日志,这对于调试程序是非常有用的。