最近碰到的一些storm问题总结(不断更新)
目前使用的是storm.0.6.0这个版本.至于其他版本有没有这问题,不做研究.
★yaml跟我们一般用的属性配置文件有所不同,它的要求更严格一些,因此在往conf/storm.yaml中添加配置的时候必须注意.
比如必须注意开始位置和冒号后面的空格,否则配置不会生效.关于yaml相关的资料,网上有很多资料可以参考
如何检查配置是否生效,可以使用命令:stormlocalconfvalue配置关键字
但是这个命令只能在nimbus上生效,在supervisor看到的还是默认值.不知道为什么
★在部署storm节点的时候需要安装jzmq和0qm,在安装这两个依赖包之后,需要执行sudo-urootldconfig.否则会出现异常:
java.lang.UnsatisfiedLinkError:/usr/local/lib/libjzmq.so.0.0.0:libzmq.so.1:cannotopensharedobjectfile:Nosuchfileor
directory
atjava.lang.ClassLoader$NativeLibrary.load(NativeMethod)
atjava.lang.ClassLoader.loadLibrary0(ClassLoader.java:1803)
atjava.lang.ClassLoader.loadLibrary(ClassLoader.java:1728)
atjava.lang.Runtime.loadLibrary0(Runtime.java:823)
atjava.lang.System.loadLibrary(System.java:1028)
atorg.zeromq.ZMQ.<clinit>(ZMQ.java:34)
这里有相关的讨论:
http://groups.google.com/group/storm-user/browse_thread/thread/656fb21d7166574d
★关闭nimbus相关进程:
kill`psaux|egrep'(daemon\.nimbus)|(storm\.ui\.core)'|fgrep-vegrep|awk'{print$2}'`
★干掉supervisor上的所有storm进程:
kill`psaux|fgrepstorm|fgrep-v'fgrep'|awk'{print$2}'`
★目前storm貌似不支持动态加载log4j配置文件,每一个supervisor节点需要修改log4j/storm.log.properties文件来调整日志输出.
★在打包toplogy工程的时候,如果采用assembly方式,对于相关的依赖的配置一般要这样:
<dependencySets> <dependencySet> <outputDirectory>/</outputDirectory> <unpack>true</unpack> <excludes> <exclude>storm:storm</exclude> </excludes> </dependencySet> </dependencySets>
wiki上说可以用<scope>compile</scope>.然后将storm依赖设置为runtime,貌似不行.另外就是所有的依赖包将全部解压,然后将所有依赖的配置和class文件生成一个文件.这个是通过<unpack>true</unpack>参数来控制的.
★有时候supervisor的conf/storm.yaml参数设置不合理,会导致worker无法起来的现象,比如我碰到的一个例子是.定义了worker.childopts(给了一个不合理的jvm参数).结果导致worker反复启动,而均不成功,这里的日志信息也不明确,只是说无法start,但是没有给更详细的上下文信息.
-0611-427a-8e23-84fe25047dbd6701d7f8354d-9ec0-4272-aa0d-9260f7b0042f
2012-02-2414:24:27supervisor[INFO]
a17ff23e-00b2-4e51-9001-74664413d2ddstillhasn'tstarted
2012-02-2414:24:28supervisor[INFO]
a17ff23e-00b2-4e51-9001-74664413d2ddstillhasn'tstarted
2012-02-2414:24:28supervisor[INFO]
a17ff23e-00b2-4e51-9001-74664413d2ddstillhasn'tstarted
2012-02-2414:24:29supervisor[INFO]
a17ff23e-00b2-4e51-9001-74664413d2ddstillhasn'tstarted
★有问题直接上storm-user搜索相关帖子或者问Storm的作者NathanMarz.此人回答问题非常热心.从提问人的id来看,貌似中国人在上面问问题的非常多^_^
★在提交topology的时候有时可能出现如下异常:
atbacktype.storm.utils.NimbusClient.<init>(NimbusClient.java:30)
atbacktype.storm.utils.NimbusClient.getConfiguredClient(NimbusClient.java:17)
atbacktype.storm.StormSubmitter.submitJar(StormSubmitter.java:78)
atbacktype.storm.StormSubmitter.submitJar(StormSubmitter.java:71)
atbacktype.storm.StormSubmitter.submitTopology(StormSubmitter.java:50)
atcom.taobao.kaleidoscope.storm.IcdbTopology.main(IcdbTopology.java:59)
但是启动nimbus是没有问题的,这个主要以为内conf_dir路径设置不正确,在bin/storm脚本中需要加上这样一句:
CONF_DIR = STORM_DIR + "/conf"
★Q:如何知道一个tuple的来源?
A:tuple.getSourceStramId()
Update:
刚看到淘宝技术沙龙上@爱的马斯特提到storm0.6.x版本有内存泄露的坑,而0.7.0这个版本已经解决了,貌似目前我们这边还没有碰到,在考虑是否要升级到最新版本?