以上是storm的环境, 如果不匹配的java和python, 有可能会出错.
storm使用Zookeeper并不进行消息传递,所以对Zookeeper造成负载压力很低. 注意:
- Zookeeper是故障快速的,如果遇到任何错误情况都将退出进程. 请在有监督的情况下运行Zookeeper
- 建立一个cron任务定时压缩Zookeeper的数据和事务日志. Zookeeper本身的守护进程不会这么做, 很容易耗尽磁盘空间.
下载zip或者tar版storm包, 上传到Nimbus和worker服务器.
下载地址: http://storm.apache.org/downloads.html
选择自己需要的版本. 本文选择 apache-storm-1.2.1.tar.gz .
上传到服务器解压:
tar -xzvf apache-storm-1.2.1.tar.gz
ln -s apache-storm-1.2.1 storm
cd storm
vim conf/storm.yaml
storm.zookeeper.servers:
- "111.222.333.444"
- "555.666.777.888"
storm.local.dir: "/mnt/storm"
nimbus.seeds: ["dyl"]
鼓励填写机器的全域名(FQDN Fully Qualified Domain Name).
这里有个比较有意思的地方, 服务器hostname: dyl ,第一次这里我写了127.0.0.1, 在storm ui上,看到了 两个nimbus:
storm.yaml:
nimbus.seeds: [127.0.0.1]
storm ui nimbus summary:
Host | Port | Status | … |
---|---|---|---|
dyl | 6627 | Leader | … |
127.0.0.1 | 6627 | offline | … |
可以看出填写127.0.0.1时, 默认包含了启动nimbus的服务器名,造成同一台服务器,两个nimbus候选者,所以其中一个offline, 无法正常启动. 但是如果什么都不写,将没有nimbus. 填写dyl, 则正常,只包含dyl一个nimbus.
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
此时就可以启动 Storm了, 主要启动三个组件:
1. Nimbus: 主节点(Nimbus)运行命令: bin/storm nimbus
2. Supervisor: 每个Supervisor节点运行:bin/storm supervisor.
Supervisor守护程序负责启动和停止该机器上的worker进程.
3. UI: 主节点(Nimbus)上运行: bin/storm ui
可以通过 http://{ui host}:8080 访问 storm ui. 命令执行之后稍微等待一段时间才能访问.
如上默认都是前台启动,可以nohup后台启动. Storm是一个fail-fast系统,意味着每当遇到意外错误时,进程将停止. Storm的设计是的它可以在任何时候安全的停止, 并在进程重新启动时正确恢复. 这就是为什么Storm不会在进程中保持状态, 如果Nimbus或者Supervisor重新启动,运行的topologies不会受到影响.
比较好的方式是使用Supervisor管理Linux进程.
1. 安装Supervisor
yum install supervisor
[include]
files = supervisord.d/*.conf
使其自动加载 /etc/supervisord.d目录下所有的conf文件.在该目下新建文件storm.conf:
[program:storm-nimbus]
command=/opt/storm/bin/storm nimbus
autostart=true
startretries=3
log_stdout=true
log_stderr=true
redirect_stderr=true
stdout_logfile= /var/log/storm/nimbus.log
stdout_stdout_logfile_backups=1
stdout_stdout_logfile_maxbytes=1MB
[program:storm-supervisor]
command=/opt/storm/bin/storm supervisor
autostart=true
startretries=3
log_stdout=true
log_stderr=true
redirect_stderr=true
stdout_logfile= /var/log/storm/supervisor.log
stdout_stdout_logfile_backups=1
stdout_stdout_logfile_maxbytes=1MB
[program:storm-ui]
command=/opt/storm/bin/storm ui
autostart=true
startretries=3
log_stdout=true
log_stderr=true
redirect_stderr=true
stdout_logfile= /var/log/storm/ui.log
stdout_stdout_logfile_backups=1
stdout_stdout_logfile_maxbytes=1MB
supervisord -c /etc/supervisord.conf
此时, storm的三个组件将会全部启动. 等待一会儿, 访问storm ui.