最近碰到的一些storm问题总结(不断更新)

目前使用的是storm.0.6.0这个版本. 至于其他版本有没有这问题, 不做研究.

★ yaml跟我们一般用的属性配置文件有所不同, 它的要求更严格一些, 因此在往conf/storm.yaml中添加配置的时候必须注意.

比如必须注意开始位置和冒号后面的空格, 否则配置不会生效. 关于yaml相关的资料, 网上有很多资料可以参考

如何检查配置是否生效, 可以使用命令: storm localconfvalue 配置关键字
但是这个命令只能在nimbus上生效, 在supervisor看到的还是默认值. 不知道为什么

★ 在部署storm节点的时候需要安装jzmq和0qm, 在安装这两个依赖包之后, 需要执行sudo -u root ldconfig. 否则会出现异常:
引用
2012-02-24 16:30:30 worker [ERROR] Error on initialization of server mk-worker
java.lang.UnsatisfiedLinkError: /usr/local/lib/libjzmq.so.0.0.0: libzmq.so.1: cannot open shared object file: No such file or
directory
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1803)
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1728)
        at java.lang.Runtime.loadLibrary0(Runtime.java:823)
        at java.lang.System.loadLibrary(System.java:1028)
        at org.zeromq.ZMQ.<clinit>(ZMQ.java:34)

这里有相关的讨论:
http://groups.google.com/group/storm-user/browse_thread/thread/656fb21d7166574d

★ 关闭nimbus相关进程:
kill `ps aux | egrep '(daemon\.nimbus)|(storm\.ui\.core)' | fgrep -v egrep | awk '{print $2}'`

★ 干掉supervisor上的所有storm进程:
kill `ps aux | fgrep storm | 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, 但是没有给更详细的上下文信息. 
引用
backtype.storm.daemon.worker mytoplogy-12-1330051497 fdd0effd
-0611-427a-8e23-84fe25047dbd 6701 d7f8354d-9ec0-4272-aa0d-9260f7b0042f
2012-02-24 14:24:27 supervisor [INFO]
a17ff23e-00b2-4e51-9001-74664413d2dd still hasn't started
2012-02-24 14:24:28 supervisor [INFO]
a17ff23e-00b2-4e51-9001-74664413d2dd still hasn't started
2012-02-24 14:24:28 supervisor [INFO]
a17ff23e-00b2-4e51-9001-74664413d2dd still hasn't started
2012-02-24 14:24:29 supervisor [INFO]
a17ff23e-00b2-4e51-9001-74664413d2dd still hasn't started



★ 有问题直接上 storm-user搜索相关帖子或者问Storm的作者Nathan Marz. 此人回答问题非常热心. 从提问人的id来看, 貌似中国人在上面问问题的非常多^_^

★在提交topology的时候有时可能出现如下异常:

引用
Exception in thread "main" java.lang.IllegalArgumentException: Nimbus host is not set
        at backtype.storm.utils.NimbusClient.<init>(NimbusClient.java:30)
        at backtype.storm.utils.NimbusClient.getConfiguredClient(NimbusClient.java:17)
        at backtype.storm.StormSubmitter.submitJar(StormSubmitter.java:78)
        at backtype.storm.StormSubmitter.submitJar(StormSubmitter.java:71)
        at backtype.storm.StormSubmitter.submitTopology(StormSubmitter.java:50)
        at com.taobao.kaleidoscope.storm.IcdbTopology.main(IcdbTopology.java:59)


但是启动nimbus是没有问题的, 这个主要以为内conf_dir路径设置不正确, 在bin/storm脚本中需要加上这样一句:
CONF_DIR = STORM_DIR + "/conf"


★Q:如何知道一个tuple的来源?
A:tuple.getSourceStramId()


Update:
刚看到淘宝技术沙龙上 @爱的马斯特提到storm 0.6.x版本有内存泄露的坑, 而0.7.0这个版本已经解决了, 貌似目前我们这边还没有碰到,  在考虑是否要升级到最新版本?

猜你喜欢

转载自macrochen.iteye.com/blog/1428093