作者: 大圓那些事 | 文章可以轉載,請以超鏈接形式標明文章原始出處和作者信息
以下是對個人在使用Storm過程中遇到的一些常見問題及解決方法的整理,其中部分問題的解決方法來自於網絡,由於已找不到原始鏈接,抱歉這里沒有逐一列舉。
1. 發布topologies到遠程集群時,出現Nimbus host is not set異常
原因是Nimbus沒有被正確啟動起來,可能是storm.yaml文件沒有配置,或者配置有問題。
解決方法:打開storm.yaml文件正確配置:nimbus.host: "xxx.xxx.xxx.xxx",重啟nimbus后台程序即可。
2. 發布topologies到遠程集群時,出現AlreadyAliveException(msg: xxx is already active)異常
原因是提供的topology與已經在運行的topology重名。
解決方法:發布時換一個拓撲名稱即可。
3. 啟動Supervisor時,出現java.lang.UnsatisfiedLinkError: /usr/local/lib/libjzmq.so.0.0.0: libzmq.so.1: cannot open shared object file: No such file or directory異常
原因是未找到zmq動態鏈接庫。
解決方法1:export LD_LIBRARY_PATH=/usr/local/lib
解決方法2:編輯/etc/ld.so.conf文件,增加一行:/usr/local/lib。再執行sudo ldconfig命令,重啟Supervisor。
4. 發布drpc類型的topologies到遠程集群時,出現空指針異常,連接drpc服務器失敗
原因是未正確配置drpc服務器地址。
解決方法:在conf/storm.yaml文件中增加drpc服務器配置,啟動配置文件中指定的所有drpc服務。內容如下:
drpc.servers:
- "drpc服務器ip"
5. 客戶端調用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主機別名]
6. 發布topologies時,出現不能序列化log4j.Logger的異常
原因是日志系統無法正確支付序列化。
解決方法:使用slf4j代替log4j。
7. bolt在處理消息時,worker的日志中出現Failing message
原因可能是因為Topology的消息處理超時所致。
解決方法:提交Topology時設置適當的消息超時時間,比默認消息超時時間(30秒)更長。
conf.setMessageTimeoutSecs(60);
8. 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"
9. 安裝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
10. 安裝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 ..