Storm

Storm(五)第一个集群Topology

2017-04-12  本文已影响140人  quiterr

上一篇文章编写了一个简单的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是否正确运行。

  1. Storm UI
Storm UI

Storm UI不仅可以用来查看一些信息,还有关闭topology、动态调整日志级别等功能。

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

上一篇 下一篇

猜你喜欢

热点阅读