1) 用storm jar...将项目提交给storm集群后,想查看本项目的log信息,要到supervisor机器的:storm安装路径/logs/worker-number.log(其中的number视实际情况而定)中查看。
2) 如果是用daemontools启动的storm,daemontools监控的目录是/service/storm,那么到/service/storm/logs中查看worker-number.log日志。
3) 若要更改log的级别,是debug还是info等,在storm安装路径/log4j下有个配置文件,按需要修改即可。
4) Storm的debug模式下,它本身的log非常庞大,所以我觉得自己的代码中有些重要的信息,用info比较好,这样将storm的log级别调整为info比较方便查看。
8关于maven打包问题
8.1首先maven的pom文件中的storm依赖,要么加excludestorm的相关语句(github有说明),要么加<scope>,如下:
<dependency>
<groupId>storm</groupId>
<artifactId>storm</artifactId>
<scope>test</scope>
</dependency>
加scope可以使打jar包时,不包含storm。如果包含了storm,那么提交到storm集群,会运行出错。官方要求打jar包时,要去除storm的依赖。
8.2使用maven插件,在打jar包时,包含依赖。
在pom中加入:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.path.to.main.Class</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
打jar包时使用命令:mvn assembly:assembly
8.3依赖的jar冲突问题
如果本地依赖的jar与storm的lib下的jar有冲突,即都用了一个jar,但是版本不同,那么貌似目前只能改为跟storm保持统一。官方的讨论组是这样说的。
9关于nimbus的启动问题
9.1 Stormnimbus启动失败
在使用了storm一段时间后,需要重新部署storm的集群,主要是想将storm部署在其它机器上。做了以下错误操作:
1) 没有kill 正在运行的topology,kill nimbus和supervisor的storm进程
2) 删除了配置中"storm.local.dir"的文件夹内的内容
3) 启动storm nimbus
报错:
backtype.storm.daemon.nimbus
fn__2692fn__2692exec_fn__945__auto____2693this__2731@62135133 java.io.FileNotFoundException: File'/opt/apps-install/storm/ storm_local/nimbus/stormdist/appFailed-6-1325065153/stormconf.ser' does not exist at org.apache.commons.io.FileUtils.openInputStream(FileUtils.java:137) at org.apache.commons.io.FileUtils.readFileToByteArray(FileUtils.java: 1135) atbacktype.storm.daemon.nimbusthis__2731@62135133 java.io.FileNotFoundException: File'/opt/apps-install/storm/ storm_local/nimbus/stormdist/appFailed-6-1325065153/stormconf.ser' does not exist at org.apache.commons.io.FileUtils.openInputStream(FileUtils.java:137) at org.apache.commons.io.FileUtils.readFileToByteArray(FileUtils.java: 1135) atbacktype.storm.daemon.nimbusread_storm_conf.invoke(nimbus.clj:128)
atbacktype.storm.daemon.nimbus
compute_new_task__GT_node_PLUS_port.invoke(nimbus.clj:244) atbacktype.storm.daemon.nimbuscompute_new_task__GT_node_PLUS_port.invoke(nimbus.clj:244) atbacktype.storm.daemon.nimbusmk_assignments.invoke(nimbus.clj:288)
atbacktype.storm.daemon.nimbus
fn__2692fn__2692exec_fn__945__auto____2693this__2731.invoke(nimbus.clj:460) atbacktype.storm.eventthis__2731.invoke(nimbus.clj:460) atbacktype.storm.eventevent_manager
fn__2068fn__2068fn__2069.invoke(event.clj:25)
atbacktype.storm.eventevent m anager eventmanagerfn__2068.invoke(event.clj:22)
atclojure.lang.AFn.run(AFn.java:24)
atjava.lang.Thread.run(Thread.java:662)
2011-12-29 16:15:02 util [INFO] Halting process: ("Errorwhen
processing an event")
报错原因:因为没有先killtopology,所以在启动nimbus时,zookeeper中依然保留了上次运行着的topology的信息。
解决办法:用zookeeper的zkCli.sh清理一下,我直接重装了zookeeper。但是据说在storm0.6.1中解决了该bug。而我用的是storm 0.6.0。
10Storm使用JVM参数
在配置文件storm.yaml中,有:
# to nimbus
nimbus.childopts: "-Xmx1024m"
# to supervisor
supervisor.childopts: "-Xmx1024m"