您好,登錄后才能下訂單哦!
storm問(wèn)題總結(jié)(持續(xù)更新)
1. yaml跟我們一般用的屬性配置文件有所不同, 它的要求更嚴(yán)格一些, 因此在往conf/storm.yaml中添加配置的時(shí)候必須注意.
比如必須注意開(kāi)始位置和冒號(hào)后面的空格, 否則配置不會(huì)生效. 關(guān)于yaml相關(guān)的資料, 網(wǎng)上有很多資料可以參考
如何檢查配置是否生效, 可以使用命令: storm localconfvalue 配置關(guān)鍵字
但是這個(gè)命令只能在nimbus上生效, 在supervisor看到的還是默認(rèn)值. 不知道為什么
2. 在部署storm節(jié)點(diǎn)的時(shí)候需要安裝jzmq和0qm, 在安裝這兩個(gè)依賴(lài)包之后, 需要執(zhí)行sudo -u root ldconfig. 否則會(huì)出現(xiàn)異常:
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)
這里有相關(guān)的討論:
http://groups.google.com/group/storm-user/browse_thread/thread/656fb21d7166574d
3. 關(guān)閉nimbus相關(guān)進(jìn)程:
kill `ps aux | egrep '(daemon\.nimbus)|(storm\.ui\.core)' | fgrep -v egrep | awk '{print $2}'`
4. 干掉supervisor上的所有storm進(jìn)程:
kill `ps aux | fgrep storm | fgrep -v 'fgrep' | awk '{print $2}'`
5. 目前storm貌似不支持動(dòng)態(tài)加載log4j配置文件, 每一個(gè)supervisor節(jié)點(diǎn)需要修改log4j/storm.log.properties文件來(lái)調(diào)整日志輸出.
發(fā)布topologies時(shí),出現(xiàn)不能序列化log4j.Logger的異常
原因是日志系統(tǒng)無(wú)法正確支付序列化。
解決方法:使用slf4j代替log4j。
6. 在打包toplogy工程的時(shí)候, 如果采用assembly方式, 對(duì)于相關(guān)的依賴(lài)的配置一般要這樣:
<dependencySets>
<dependencySet>
<outputDirectory>/</outputDirectory>
<unpack>true</unpack>
<excludes>
<exclude>storm:storm</exclude>
</excludes>
</dependencySet>
</dependencySets>
wiki上說(shuō)可以用<scope>compile</scope>. 然后將storm依賴(lài)設(shè)置為runtime, 貌似不行. 另外就是所有的依賴(lài)包將全部解壓, 然后將所有依賴(lài)的配置和class文件生成一個(gè)文件. 這個(gè)是通過(guò)<unpack>true</unpack>參數(shù)來(lái)控制的.
7. 有時(shí)候supervisor的conf/storm.yaml參數(shù)設(shè)置不合理, 會(huì)導(dǎo)致worker無(wú)法起來(lái)的現(xiàn)象,
比如我碰到的一個(gè)例子是. 定義了worker.childopts(給了一個(gè)不合理的jvm參數(shù)). 結(jié)果導(dǎo)致worker反復(fù)啟動(dòng), 而均不成功, 這里的日志信息也不明確, 只是說(shuō)無(wú)法start, 但是沒(méi)有給更詳細(xì)的上下文信息.
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
8. 有問(wèn)題直接上storm-user搜索相關(guān)帖子或者問(wèn)Storm的作者Nathan Marz. 此人回答問(wèn)題非常熱心. 從提問(wèn)人的id來(lái)看, 貌似中國(guó)人在上面問(wèn)問(wèn)題的非常多^_^
9. 發(fā)布topologies到遠(yuǎn)程集群時(shí),出現(xiàn)Nimbus host is not set異常
原因是Nimbus沒(méi)有被正確啟動(dòng)起來(lái),可能是storm.yaml文件沒(méi)有配置,或者配置有問(wèn)題。
解決方法:打開(kāi)storm.yaml文件正確配置:nimbus.host: "xxx.xxx.xxx.xxx",重啟nimbus后臺(tái)程序即可。
在提交topology的時(shí)候有時(shí)可能出現(xiàn)如下異常:
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)
但是啟動(dòng)nimbus是沒(méi)有問(wèn)題的, 這個(gè)主要以為內(nèi)conf_dir路徑設(shè)置不正確, 在bin/storm腳本中需要加上這樣一句:
CONF_DIR = STORM_DIR + "/conf"
10. 如何知道一個(gè)tuple的來(lái)源?
A:tuple.getSourceStramId()
11. 看到淘寶技術(shù)沙龍上@愛(ài)的馬斯特提到storm 0.6.x版本有內(nèi)存泄露的坑, 而0.7.0這個(gè)版本已經(jīng)解決了, 貌似目前我們這邊還沒(méi)有碰到, 在考慮是否要升級(jí)到最新版本?
12. 發(fā)布topologies到遠(yuǎn)程集群時(shí),出現(xiàn)AlreadyAliveException(msg: xxx is already active)異常
原因是提供的topology與已經(jīng)在運(yùn)行的topology重名。
解決方法:發(fā)布時(shí)換一個(gè)拓?fù)涿Q(chēng)即可
13. 發(fā)布drpc類(lèi)型的topologies到遠(yuǎn)程集群時(shí),出現(xiàn)空指針異常,連接drpc服務(wù)器失敗
原因是未正確配置drpc服務(wù)器地址。
解決方法:在conf/storm.yaml文件中增加drpc服務(wù)器配置,啟動(dòng)配置文件中指定的所有drpc服務(wù)。內(nèi)容如下:
drpc.servers:
- "drpc服務(wù)器ip"
13. 客戶端調(diào)用drpc服務(wù)時(shí),worker的日志中出現(xiàn)Failing message,而bolt都未收到數(shù)據(jù)
錯(cuò)誤日志如下所示:
2011-12-02 09:59:16 task [INFO] Failing message backtype.storm.drpc.DRPCSpout$DRPCMessageId@3770bdf7: source: 1:27, stream: 1, id: {-5919451531315711689=-5919451531315711689}, [foo.com/blog/1, {"port":3772,"id":"5","host":"10.0.0.24"}]
解決方法:主機(jī)名,域名,hosts文件配置不正確會(huì)引起這類(lèi)錯(cuò)誤。
檢查并修改storm相關(guān)機(jī)器的主機(jī)名,域名,hosts文件。重啟網(wǎng)絡(luò)服務(wù):service network restart。重啟storm,再次調(diào)用drpc服務(wù),成功。
Hosts文件中必須包含如下內(nèi)容:
[nimbus主機(jī)ip] [nimbus主機(jī)名] [nimbus主機(jī)別名]
[supervisor主機(jī)ip] [supervisor主機(jī)名] [supervisor主機(jī)別名]
[zookeeper主機(jī)ip] [zookeeper主機(jī)名] [zookeeper主機(jī)別名]
14. bolt在處理消息時(shí),worker的日志中出現(xiàn)Failing message
原因可能是因?yàn)門(mén)opology的消息處理超時(shí)所致。
解決方法:提交Topology時(shí)設(shè)置適當(dāng)?shù)南⒊瑫r(shí)時(shí)間,比默認(rèn)消息超時(shí)時(shí)間(30秒)更長(zhǎng)。
conf.setMessageTimeoutSecs(60);
15. storm啟動(dòng)時(shí)報(bào)no jzmq in java.library.path錯(cuò)誤
原因是找不到j(luò)zmq,默認(rèn)情況下在執(zhí)行install_zmq.sh時(shí),那些.so文件安裝路徑在/usr/local/lib,但是實(shí)際安裝時(shí)可能裝在其他的路徑下了。
解決方法:在storm.yaml中添加:
java.library.path: "/opt/storm/jzmq/lib:/opt/storm/zeromq/lib:/usr/local/lib:/opt/local/lib:/usr/lib"
16. 安裝jzmq時(shí)遇到No rule to make target `classdist_noinst.stamp'的make錯(cuò)誤
具體的make錯(cuò)誤信息:
make[1]: *** No rule to make target `classdist_noinst.stamp',
needed by `org/zeromq/ZMQ.class'. Stop.
解決方法:手動(dòng)創(chuàng)建classdist_noinst.stamp空文件。
touch src/classdist_noinst.stamp
17. 安裝jzmq時(shí)遇到cannot access org.zeromq.ZMQ的make錯(cuò)誤
具體的make錯(cuò)誤信息:
error: cannot access org.zeromq.ZMQ
class file for org.zeromq.ZMQ not found
javadoc: error - Class org.zeromq.ZMQ not found.
解決方法:手動(dòng)編譯,然后重新make即可通過(guò)。
cd src
javac -d . org/zeromq/*.java
cd ..
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。