上一篇文章編寫了一個簡單的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