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

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

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

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

如何检查配置是否生效,可以使用命令:stormlocalconfvalue配置关键字

但是这个命令只能在nimbus上生效,在supervisor看到的还是默认值.不知道为什么

★在部署storm节点的时候需要安装jzmq和0qm,在安装这两个依赖包之后,需要执行sudo-urootldconfig.否则会出现异常:

引用
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: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,但是没有给更详细的上下文信息.

引用
backtype.storm.daemon.worker mytoplogy-12-1330051497 fdd0effd

-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的时候有时可能出现如下异常:

引用
Exception in thread "main" java.lang.IllegalArgumentException: Nimbus host is not set

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这个版本已经解决了,貌似目前我们这边还没有碰到,在考虑是否要升级到最新版本?

相关推荐