您好,登錄后才能下訂單哦!
storm問題總結(持續更新)
1. yaml跟我們一般用的屬性配置文件有所不同, 它的要求更嚴格一些, 因此在往conf/storm.yaml中添加配置的時候必須注意.
比如必須注意開始位置和冒號后面的空格, 否則配置不會生效. 關于yaml相關的資料, 網上有很多資料可以參考
如何檢查配置是否生效, 可以使用命令: storm localconfvalue 配置關鍵字
但是這個命令只能在nimbus上生效, 在supervisor看到的還是默認值. 不知道為什么
2. 在部署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
3. 關閉nimbus相關進程:
kill `ps aux | egrep '(daemon\.nimbus)|(storm\.ui\.core)' | fgrep -v egrep | awk '{print $2}'`
4. 干掉supervisor上的所有storm進程:
kill `ps aux | fgrep storm | fgrep -v 'fgrep' | awk '{print $2}'`
5. 目前storm貌似不支持動態加載log4j配置文件, 每一個supervisor節點需要修改log4j/storm.log.properties文件來調整日志輸出.
發布topologies時,出現不能序列化log4j.Logger的異常
原因是日志系統無法正確支付序列化。
解決方法:使用slf4j代替log4j。
6. 在打包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>參數來控制的.
7. 有時候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
8. 有問題直接上storm-user搜索相關帖子或者問Storm的作者Nathan Marz. 此人回答問題非常熱心. 從提問人的id來看, 貌似中國人在上面問問題的非常多^_^
9. 發布topologies到遠程集群時,出現Nimbus host is not set異常
原因是Nimbus沒有被正確啟動起來,可能是storm.yaml文件沒有配置,或者配置有問題。
解決方法:打開storm.yaml文件正確配置:nimbus.host: "xxx.xxx.xxx.xxx",重啟nimbus后臺程序即可。
在提交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"
10. 如何知道一個tuple的來源?
A:tuple.getSourceStramId()
11. 看到淘寶技術沙龍上@愛的馬斯特提到storm 0.6.x版本有內存泄露的坑, 而0.7.0這個版本已經解決了, 貌似目前我們這邊還沒有碰到, 在考慮是否要升級到最新版本?
12. 發布topologies到遠程集群時,出現AlreadyAliveException(msg: xxx is already active)異常
原因是提供的topology與已經在運行的topology重名。
解決方法:發布時換一個拓撲名稱即可
13. 發布drpc類型的topologies到遠程集群時,出現空指針異常,連接drpc服務器失敗
原因是未正確配置drpc服務器地址。
解決方法:在conf/storm.yaml文件中增加drpc服務器配置,啟動配置文件中指定的所有drpc服務。內容如下:
drpc.servers:
- "drpc服務器ip"
13. 客戶端調用drpc服務時,worker的日志中出現Failing message,而bolt都未收到數據
錯誤日志如下所示:
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"}]
解決方法:主機名,域名,hosts文件配置不正確會引起這類錯誤。
檢查并修改storm相關機器的主機名,域名,hosts文件。重啟網絡服務:service network restart。重啟storm,再次調用drpc服務,成功。
Hosts文件中必須包含如下內容:
[nimbus主機ip] [nimbus主機名] [nimbus主機別名]
[supervisor主機ip] [supervisor主機名] [supervisor主機別名]
[zookeeper主機ip] [zookeeper主機名] [zookeeper主機別名]
14. bolt在處理消息時,worker的日志中出現Failing message
原因可能是因為Topology的消息處理超時所致。
解決方法:提交Topology時設置適當的消息超時時間,比默認消息超時時間(30秒)更長。
conf.setMessageTimeoutSecs(60);
15. storm啟動時報no jzmq in java.library.path錯誤
原因是找不到jzmq,默認情況下在執行install_zmq.sh時,那些.so文件安裝路徑在/usr/local/lib,但是實際安裝時可能裝在其他的路徑下了。
解決方法:在storm.yaml中添加:
java.library.path: "/opt/storm/jzmq/lib:/opt/storm/zeromq/lib:/usr/local/lib:/opt/local/lib:/usr/lib"
16. 安裝jzmq時遇到No rule to make target `classdist_noinst.stamp'的make錯誤
具體的make錯誤信息:
make[1]: *** No rule to make target `classdist_noinst.stamp',
needed by `org/zeromq/ZMQ.class'. Stop.
解決方法:手動創建classdist_noinst.stamp空文件。
touch src/classdist_noinst.stamp
17. 安裝jzmq時遇到cannot access org.zeromq.ZMQ的make錯誤
具體的make錯誤信息:
error: cannot access org.zeromq.ZMQ
class file for org.zeromq.ZMQ not found
javadoc: error - Class org.zeromq.ZMQ not found.
解決方法:手動編譯,然后重新make即可通過。
cd src
javac -d . org/zeromq/*.java
cd ..
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。