linux上安裝storm單機模式
最近的工作設計到了海量的實時的日誌分析與重組,討論之下,想嘗試使用storm來開發這套分析程式,於是就開始了新的研究與學習。
名詞解釋
nimbus:storm叢集的中心server,負責監控supervisor的情況
supervisor:每一臺叢集的機子都有一個supervisor監控topology的執行情況
topology:相當於一個計算任務
spout:用來獲取資料並分發到計算模組
bolt:計算模組
worker:跑在supervisor上的java虛擬機器程序
executor:跑在worker裡的執行緒
task:跑在executor裡的bolt,有可能一個執行緒跑多個bolt
網上有計算單詞出現次數的簡單例子程式,這裡不重複了,說說我遇到的坑吧
1.Storm單機版的配置
我是用虛擬機器安裝storm,暫時先將storm zookeeper 等都裝在一臺centos6.6機子上,Storm版本是最新的9.4
用的java版本是1.7.0_79
python是2.6.6
nimbus的機子上需要先裝ZeroMQ和JZMQ
在配置storm.yaml的時候有個不大不小的坑,yaml格式的配置檔案 =號的兩邊都要有空格,不然會報錯
配置完後先啟動zookeeper,然後是nimbus,然後是supervisor,最後是stormui
這裡我啟動supervisor的時候報了一個錯java.net.UnknownHostException
這個錯只要修改下hosts檔案,增加本機名以及對應ip即可
2.打包topology併發布到storm上去
1.開發的時候我們會引入storm-core的包,但在釋出到storm時需要將這個包排除在外
我們可以使用assembly的配置做到這一點
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd" >
<id>jar-with-dependencies</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<unpack>true</unpack>
<excludes>
<exclude>org.apache.storm:storm-core</exclude>
</excludes>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<directory>src/main/bin</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
<fileSet>
<directory>${project.build.outputDirectory}</directory>
</fileSet>
</fileSets>
</assembly>
用這個配置檔案排除storm的包
打成包後copy到機子上,用storm jar命令就可以運行了