已經碰到的或者未來碰到的關於安裝部署方面的問題以及解決方法,先挖個坑java
1.提交的topology在admin界面上看emitted始終都是0,查看日誌發現有以下錯誤:apache
worker [ERROR] Error on initialization of server mk-worker
org.zeromq.ZMQException: 無效的參數(0x16)
at org.zeromq.ZMQ$Socket.setLongSockopt(Native Method)
at org.zeromq.ZMQ$Socket.setLinger(ZMQ.java:601)
at zilch.mq$set_linger.invoke(mq.clj:57)
at backtype.storm.messaging.zmq.ZMQContext.connect(zmq.clj:62)
at backtype.storm.daemon.worker$mk_refresh_connections$this__4293$iter__4300__4304$fn__4305.invoke(worker.clj:244)
at clojure.lang.LazySeq.sval(LazySeq.java:42)
at clojure.lang.LazySeq.seq(LazySeq.java:60)
at clojure.lang.RT.seq(RT.java:473)
at clojure.core$seq.invoke(core.clj:133)
at clojure.core$dorun.invoke(core.clj:2725)
at clojure.core$doall.invoke(core.clj:2741)
at backtype.storm.daemon.worker$mk_refresh_connections$this__4293.invoke(worker.clj:238)
at...centos
個人zeromq版本是3.X ,查資料後看到有說法多是zeromq的版本問題,按照建議下載2.7.1版本,並從新安裝zeromq以及jzmq,重啓nimbus和supervisor節點,從新commit測試的topology,執行成功,日誌也沒有錯誤了。服務器
2. 安裝並編譯zeromq出錯:eclipse
make報錯:cannot link with -luuid, install uuid-dev.測試
原來是缺乏庫,嘗試yum install uuid-dev,找不到這個庫ui
bing了一下,原來uuid-dev在不一樣的平臺上名字不一樣,我用的centos上名字爲libuuid-develthis
執行yum install libuuid-devel ... spa
下載並安裝成功!日誌
3. 在eclipse中編譯storm-starter示例代碼出錯:
import backtype.storm.task.IMetricsContext 找不到.
本身判斷是引用的storm.jar版本問題,把我引用的0.8.1版本的jar包換成0.7的,結果錯誤更多,一查發現搞反了,應該用更新的jar包,因而下載0.8.2版本的編譯,錯誤消除!
4. drpc示例代碼調用錯誤
像服務器上部署了storm-starter的BasicDRPCTopology,
使用客戶端代碼嘗試鏈接drpc server發送參數並獲取結果
DRPCClient client= new DRPCClient("192.168.72.203",3772);
String result = client.execute("basicdprc","goodbye");
System.out.println(result);
192.168.72.203是我在服務端配置的drpc服務器的ip
代碼執行到execute之後停住,很長時間都沒法執行,到服務端查看drpc.log日誌,有以下錯誤:
TNonblockingServer [WARN] Got an IOException in internalRead!
java.io.IOException: Connection reset by peer
at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:218)
at sun.nio.ch.IOUtil.read(IOUtil.java:191)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:359)
at org.apache.thrift7.transport.TNonblockingSocket.read(TNonblockingSocket.java:141)
at org.apache.thrift7.server.TNonblockingServer$FrameBuffer.internalRead(TNonblockingServer.java:669)
at org.apache.thrift7.server.TNonblockingServer$FrameBuffer.read(TNonblockingServer.java:458)
at org.apache.thrift7.server.TNonblockingServer$SelectThread.handleRead(TNonblockingServer.java:359)
at org.apache.thrift7.server.TNonblockingServer$SelectThread.select(TNonblockingServer.java:304)
at org.apache.thrift7.server.TNonblockingServer$SelectThread.run(TNonblockingServer.java:243)
折騰了一天多,最終解決了這個詭異的問題,錯誤緣由出奇的簡單:
BasicDRPCTopology代碼中聲明new LinearDRPCTopologyBuilder("exclamation");
指定了topology的name爲exclamation
而我在手動使用./storm jar...參數提交的時候指定的名字是basicdprc,提交topology的時候是正常的,在storm
ui管理界面裏看到此topology的名字也是basicdprc,可是DRPCClient調用execute的時候卻必須使用代碼中指定的名稱... 改爲 client.execute("exclamation","goodbye");就能夠順利調用了。
神那,怎麼會這樣!!!既然容許參數指定提交的topology名稱,那drpcclient也應該容許使用此名稱啊!!這種限制簡直要讓人撞牆!!
5. storm.yaml配置文件格式錯誤:
yaml配置文件的格式要求比較變態:
配置鍵值對 的時候,冒號後面須要有一個空格,不能直接跟值,不然解析的時候會報錯:
例如 storm.zookeeper.port: 2183 2183和冒號間就須要有一空格
另外行的開頭前面也須要有空格...