Storm实战常见问题及解决方案(4)

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"

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/249d63dcf6c0ffbf2b65e7f09da2cf1d.html