任务:通过storm 提交一个拓扑,strom的处理分几个部分,spout负责数据的不断输出,从spout往bolt流转的时候对数据进行随机的分配,比如我在spout里面有一个数组,数组元素不断往外发数据,第一层的bolt再单词后面加三个感叹号,第二层的bolt再前一次的基础上在加三个感叹号。对单词进行统计,一共接收了多个个单词。(storm是在线计算,mapreduce是离线计算)
安装过程
vim storm.yaml
写上注册在zookeeper 上的hostname的名字,指定nimbus主,指定开启的端口号,每个端口号代表一个进程,一台机器上有5个进程,那么两台supervisor 一共有10个进程(配置文件需要分发到slave1和 salve2上)
storm.zookeeper.servers:
- "master"
- "slave1"
- "slave2"
nimbus.host: "master"
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
- 6704
怎么启动呢?自己写一个启动脚本(storm没有为我们提供启动和kill脚本),主的脚本和从的脚本不是一个脚本,这个要注意一下
主的脚本
start.sh
python bin/storm nimbus &
python bin/storm ui &
python bin/storm logviewer &
kill.sh
kill `ps aux | egrep '(daemon\.numbus)|(storm\.ui\.core)'| fgrep -v egrep | awk '{print $2}'`
Logview通过ui页面查看log的滚动信息
从的脚本
start.sh
python bin/storm supervisor &
python bin/storm logviewer &
Kill.sh
kill `ps aux | fgrep storm | fgrep -v 'fgrep' | awk '{print $2}'`
启动
Bash run.sh
启动一个浏览器看页面
用eclipse把代码生成一个jar包
本地模式跑代码(如果本地都跑不起来,提交到集群上也肯定失败)
python /usr/local/src/apache-storm-0.9.3/bin/storm jar ./storm_badou.jar testStorm.wordcountStart local (包名.类名)
然后提交到集群上
python /usr/local/src/apache-storm-0.9.3/bin/storm jar ./storm_badou.jar testStorm.wordcountStart remote