環境:html
安裝環境依賴:java
這裏,假設你 已經安裝好了jdk、Pythonpython
安裝zookeeper:git
詳細shell腳本以下:github
# 複製到usr/local目錄下 [root@localhost hager]# mv zookeeper-3.4.8 /usr/local/ # 軟連 [root@localhost local]# ln -s zookeeper-3.4.8/ zookeeper #修改權限 其中hager表示你的帳戶名 [root@localhost local]# sudo chown -R hager ./zookeeper #建立文件夾 [root@localhost zookeeper]# mkdir tmp #修改配置 [root@localhost zookeeper]# cp conf/zoo_sample.cfg conf/zoo.cfg #啓動服務 [root@localhost bin]# ./zkServer.sh start
安裝storm:shell
詳細shell以下:apache
[root@localhost local]# ln -s apache-storm-1.0.0/ apache-storm [root@localhost local]# sudo chown -R hager ./apache-storm [root@localhost apache-storm]# cd conf/
########### These MUST be filled in for a storm configuration # storm.zookeeper.servers: # - "server1" # - "server2" # # nimbus.seeds: ["host1", "host2", "host3"]
# 由於是在單機本機運行,因此把server和seeds都設置爲本機IP storm.zookeeper.servers: - "127.0.0.1" nimbus.seeds: ["127.0.0.1"]
簡單配置後就能夠啓動 Storm 了。執行以下命令啓動 nimbus 後臺進程:centos
[root@localhost bin]# ./storm nimbus
Running: /usr/java/jdk1.8.0_72/bin/java -server -Ddaemon.name=nimbus -Dstorm.options= -Dstorm.home=/usr/local/apache-storm-1.0.0 -Dstorm.log.dir=/usr/local/apache-storm-1.0.0/logs -Djava.library.path=/usr/local/lib:/opt/local/lib:/usr/lib -Dstorm.conf.file= -cp /usr/local/apache-storm-1.0.0/lib/storm-core-1.0.0.jar:/usr/local/apache-storm-1.0.0/lib/kryo-3.0.3.jar:/usr/local/apache-storm-1.0.0/lib/reflectasm-1.10.1.jar:/usr/local/apache-storm-1.0.0/lib/asm-5.0.3.jar:/usr/local/apache-storm-1.0.0/lib/minlog-1.3.0.jar:/usr/local/apache-storm-1.0.0/lib/objenesis-2.1.jar:/usr/local/apache-storm-1.0.0/lib/clojure-1.7.0.jar:/usr/local/apache-storm-1.0.0/lib/disruptor-3.3.2.jar:/usr/local/apache-storm-1.0.0/lib/log4j-api-2.1.jar:/usr/local/apache-storm-1.0.0/lib/log4j-core-2.1.jar:/usr/local/apache-storm-1.0.0/lib/log4j-slf4j-impl-2.1.jar:/usr/local/apache-storm-1.0.0/lib/slf4j-api-1.7.7.jar:/usr/local/apache-storm-1.0.0/lib/log4j-over-slf4j-1.6.6.jar:/usr/local/apache-storm-1.0.0/lib/servlet-api-2.5.jar:/usr/local/apache-storm-1.0.0/lib/storm-rename-hack-1.0.0.jar:/usr/local/apache-storm/conf -Xmx1024m -Dlogfile.name=nimbus.log -DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector -Dlog4j.configurationFile=/usr/local/apache-storm-1.0.0/log4j2/cluster.xml org.apache.storm.daemon.nimbusapi
啓動 nimbus 後,終端被該進程佔用了,不能再繼續執行其餘命令了。所以咱們須要另外開啓一個終端,而後執行以下命令啓動 supervisor 後臺進程:瀏覽器
[root@localhost bin]# ./storm supervisor
Running: /usr/java/jdk1.8.0_72/bin/java -server -Ddaemon.name=supervisor -Dstorm.options= -Dstorm.home=/usr/local/apache-storm-1.0.0 -Dstorm.log.dir=/usr/local/apache-storm-1.0.0/logs -Djava.library.path=/usr/local/lib:/opt/local/lib:/usr/lib -Dstorm.conf.file= -cp /usr/local/apache-storm-1.0.0/lib/storm-core-1.0.0.jar:/usr/local/apache-storm-1.0.0/lib/kryo-3.0.3.jar:/usr/local/apache-storm-1.0.0/lib/reflectasm-1.10.1.jar:/usr/local/apache-storm-1.0.0/lib/asm-5.0.3.jar:/usr/local/apache-storm-1.0.0/lib/minlog-1.3.0.jar:/usr/local/apache-storm-1.0.0/lib/objenesis-2.1.jar:/usr/local/apache-storm-1.0.0/lib/clojure-1.7.0.jar:/usr/local/apache-storm-1.0.0/lib/disruptor-3.3.2.jar:/usr/local/apache-storm-1.0.0/lib/log4j-api-2.1.jar:/usr/local/apache-storm-1.0.0/lib/log4j-core-2.1.jar:/usr/local/apache-storm-1.0.0/lib/log4j-slf4j-impl-2.1.jar:/usr/local/apache-storm-1.0.0/lib/slf4j-api-1.7.7.jar:/usr/local/apache-storm-1.0.0/lib/log4j-over-slf4j-1.6.6.jar:/usr/local/apache-storm-1.0.0/lib/servlet-api-2.5.jar:/usr/local/apache-storm-1.0.0/lib/storm-rename-hack-1.0.0.jar:/usr/local/apache-storm/conf -Xmx256m -Dlogfile.name=supervisor.log -DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector -Dlog4j.configurationFile=/usr/local/apache-storm-1.0.0/log4j2/cluster.xml org.apache.storm.daemon.supervisor
啓動stormUI服務,這樣就能夠經過瀏覽器訪問到stormUI界面;http://localhost:8080/index.html
[root@localhost bin]# ./storm ui
Running: /usr/java/jdk1.8.0_72/bin/java -server -Ddaemon.name=ui -Dstorm.options= -Dstorm.home=/usr/local/apache-storm-1.0.0 -Dstorm.log.dir=/usr/local/apache-storm-1.0.0/logs -Djava.library.path=/usr/local/lib:/opt/local/lib:/usr/lib -Dstorm.conf.file= -cp /usr/local/apache-storm-1.0.0/lib/storm-core-1.0.0.jar:/usr/local/apache-storm-1.0.0/lib/kryo-3.0.3.jar:/usr/local/apache-storm-1.0.0/lib/reflectasm-1.10.1.jar:/usr/local/apache-storm-1.0.0/lib/asm-5.0.3.jar:/usr/local/apache-storm-1.0.0/lib/minlog-1.3.0.jar:/usr/local/apache-storm-1.0.0/lib/objenesis-2.1.jar:/usr/local/apache-storm-1.0.0/lib/clojure-1.7.0.jar:/usr/local/apache-storm-1.0.0/lib/disruptor-3.3.2.jar:/usr/local/apache-storm-1.0.0/lib/log4j-api-2.1.jar:/usr/local/apache-storm-1.0.0/lib/log4j-core-2.1.jar:/usr/local/apache-storm-1.0.0/lib/log4j-slf4j-impl-2.1.jar:/usr/local/apache-storm-1.0.0/lib/slf4j-api-1.7.7.jar:/usr/local/apache-storm-1.0.0/lib/log4j-over-slf4j-1.6.6.jar:/usr/local/apache-storm-1.0.0/lib/servlet-api-2.5.jar:/usr/local/apache-storm-1.0.0/lib/storm-rename-hack-1.0.0.jar:/usr/local/apache-storm-1.0.0:/usr/local/apache-storm/conf -Xmx768m -Dlogfile.name=ui.log -DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector -Dlog4j.configurationFile=/usr/local/apache-storm-1.0.0/log4j2/cluster.xml org.apache.storm.ui.core
遇到問題:
Q一、如何把nimbus、supervisor、UI安裝成後臺運行;
A:如下是啓動Storm各個後臺進程的方式:
[root@localhost bin]# ls flight.bash storm storm.cmd storm-config.cmd storm-local storm.py
# 啓動nimbus [root@localhost bin]# ./storm nimbus >/dev/null 2>&1 & [1] 49953 # 啓動supervisor
[root@localhost bin]# ./storm supervisor >/dev/null 2>&1 & [2] 49978 # 啓動 stormUI
[root@localhost bin]# ./storm ui >/dev/null 2>&1 & [3] 50051 [root@localhost bin]# jps 49953 nimbus 2822 jenkins.war 50167 Jps 49978 supervisor 50157 config_value 2846 Bootstrap 4879 QuorumPeerMain [root@localhost bin]#
注意事項:
export JAVA_HOME=/usr/java/jdk1.8.0_72
export M2_HOME=/opt/apache-maven
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.8
export STORM_HOME=/usr/local/apache-storm-1.0.0
export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin:$STORM_HOME/bin
Q二、若是8080端口被佔用,只是更改storm.yaml中的ui.port並不能完全修改好,好比8000(logviewer.port),6699這些日誌查看端口;
測試:
經過jps 進行檢查服務是否正常:
[root@localhost hager]# jps 7328 nimbus 8331 Jps 7630 supervisor 4879 QuorumPeerMain
上傳業務jar包到topology:
一、啓動Storm Topology
bin/storm jar {jarPath} {mainPath} {args}
[root@localhost bin]# ./storm jar /usr/local/apache-storm/examples/storm-starter/storm-starter-topologies-1.0.0.jar storm.starter.StatefulTopology StatefulTopoArgs1
其中,jar包存在路徑爲:/usr/local/apache-storm/examples/storm-starter/storm-starter-topologies-1.0.0.jar
main函數入口爲:storm.starter.StatefulTopology
args : StatefulTopoArgs1
topologyname: word-count
Topology summary
Name Id Owner Status Uptime Num workers Num executors Num tasks Replication count Assigned Mem (MB) Scheduler Info
word-count word-count-2-1461901281 root ACTIVE 1m 36s 1 8 8 1 832
那麼這個word-count 是哪裏來的呢?實際上是在向集羣提交拓撲時,指定的名稱:
if (args != null && args.length > 0) {
// 若是指定參數,那麼就執行遠程集羣 conf.setNumWorkers(1); StormSubmitter.submitTopology("word-count", conf, builder.createTopology()); } else {
// 不然,就執行本地集羣,而後sleep後就會關閉集羣 conf.setMaxTaskParallelism(1); LocalCluster cluster = new LocalCluster(); cluster.submitTopology("word-count-local", conf, builder.createTopology()); Thread.sleep(10000L); cluster.shutdown(); }
具體能夠參考官方教程:http://storm.apache.org/releases/1.0.0/Running-topologies-on-a-production-cluster.html
二、結束topology
由於topology是永不中止的,除非你kill掉。因此,若是想中止topology,就須要手動kill掉。
./storm kill {topologyname}
{topologyname}爲Topology提交到Storm集羣時指定的Topology任務名稱。好比上面的StatefulTopology,topologyname是 word-count
運行結果:
// 上傳圖片報錯,回頭再補吧。
知識擴展:
Storm集羣中有兩類節點:主控節點(Master Node)和工做節點(Worker Node)。其中,主控節點只有一個,而工做節點能夠有多個。
nimbus:位於主節點上,主要負責storm集羣內部分發代碼,對節點分配任務,並監視主機故障。
supervisor:Supervisor監聽其主機上已經分配的主機的做業,啓動和中止Nimbus已經分配的工做進程。
問題彙總:
Q一、org.apache.storm.utils.NimbusLeaderNotFoundException: Could not find leader nimbus from seed hosts ["127.0.0.1"]. Did you specify a valid list of nimbus hosts for config nimbus.seeds?at org.apache.storm.utils.NimbusClient.getConfiguredClientAs(NimbusClient.java:90)
A:zookeeper中把/storm節點數據刪除,而後重啓zookeeper;(此方法太過於暴力,不知道有沒有別的更好的辦法 ,zookeeper相關命令參考http://blog.csdn.net/xiaolang85/article/details/13021339/)
./zkcli.sh
參考:
http://blogread.cn/it/article/6570?f=sr 基礎知識
http://www.cnblogs.com/panfeng412/archive/2012/11/30/how-to-install-and-deploy-storm-cluster.html
http://dblab.xmu.edu.cn/blog/install-storm/
http://www.cnblogs.com/Lawson/p/3815688.html
問題參考:
https://github.com/hortonworks-gallery/iotdemo-service/commit/02ae6087847afab17e027c10ff9f1c539b7af520