上一篇文章编写了一个简单的Topology,以local模式在Storm和IDEA中运行。这篇文章仍然以ExclamationBolt为例,只是这次要在Storm集群中运行。本文假定Storm集群环境已存在,不讨论如何搭建环境。
原创文章,转载请注明出处
修改Storm提交代码
ExclamationTopology类的大部分代码都不用修改,只需要修改main函数提交topology部分的代码如下:
try {
StormSubmitter.submitTopology(topologyName, conf,
builder.createTopology());
} catch (Exception e) {
e.printStackTrace();
}
这里也把修改之前的代码贴出来做个对比:
try {
LocalCluster cluster = new LocalCluster();
cluster.submitTopology(topologyName, conf,builder.createTopology());
Thread.sleep(60 * 1000);
cluster.shutdown();
} catch (Exception e) {
e.printStackTrace();
}
打包&运行
打包:mvn package
运行:storm jar cluster-topology-1.0-SNAPSHOT.jar com.quiterr.ExclamationTopology
打包和运行的方法和上一篇介绍的local模式是一模一样的。
调试集群模式下的topology
本地模式下,可以在IDEA中方便的调试topology;集群模式下,至少有两个方法来帮助验证topology是否正确运行。
- Storm UI
Storm UI不仅可以用来查看一些信息,还有关闭topology、动态调整日志级别等功能。
2.日志
(1)日志的路径
默认的日志路径:
/home/app/software/apache-storm-1.0.1/logs/workers-artifacts/{TopologyName}/6704/worker.log
例如ExclamationTopology:
/home/app/software/apache-storm-1.0.1/logs/workers-artifacts/ExclamationTopology-20-1491962752/6704/worker.log
(2)如果集群有多台Storm服务器,日志在哪一台上?
从路径的命名来看,日志是按照worker来分的,这样看来topology在哪台服务器上执行,日志就会在相应的服务器上。如果有3个Storm服务器,刚好有3个worker,应该每台服务器上都会有日志。为了避免找日志的繁琐,我测试时一般在集群中只运行一台服务器,一个worker。
(3)如何写入自己的日志
其实Storm已经引入了slf4j日志框架,并用log4j进行日志存储,我们不用自己再添加依赖,直接用就可以了。
public static Logger LOG = LoggerFactory.getLogger(TestWordSpout.class);
...... //省略中间的代码
LOG.info("topologyName: {}", topologyName);
(4)如何调整日志级别
Storm UI可以动态调整某个topology的日志级别。
也可以修改/home/app/software/apache-storm-1.0.1/log4j2/worker.xml
,然后重启Storm。
本文源代码:https://github.com/quiterr/storm-test/tree/master/cluster-topology