Storm 安装和配置
需要依次完成的安装步骤:
- 搭建 Zookeeper 集群
- 安装 Storm 依赖库
- 安装 Storm
- 配置 storm.yaml
- 启动 Storm 各个后台进程
搭建 Zookeeper 集群
安装 Storm 依赖库
接下来,需要在 Nimbus 和 Supervisor 机器上安装 Storm 的依赖库,具体如下:
- ZeroMQ
- JZMQ
- Java
- Python 2.6.6
以上依赖库的版本是经过 Storm 测试的,Storm 并不能保证在其他版本的 Java 或 Python 库下可运行。
安装 ZeroMQ
ZeroMQ 是一种基于消息队列的多线程网络库,其对套接字类型、连接处理、帧、甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字。ZeroMQ 是网络通信中新的一层,介于应用层和传输层之间(按照 TCP/IP 划分),其是一个可伸缩层,可并行运行,分散在分布式系统间。
$ wget https://github.com/zeromq/zeromq4-1/releases/download/v4.1.6/zeromq-4.1.6.tar.gz
$ tar -xzf zeromq-4.1.6.tar.gz
$ cd zeromq-4.1.6
$ ./configure
$ make
$ sudo make install
如果安装过程报错 uuid 找不到,则通过如下的包安装 uuid 库:
$ sudo yum install e2fsprogsl -b current
$ sudo yum install e2fsprogs-devel -b current
安装 JZMQ
Java 版本的 ZeroMQ 实现,更多信息查看 ZeroMQ 官网.
$ git clone https://github.com/nathanmarz/jzmq.git
$ cd jzmq
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install
如果安装出现以下错误:
1. 安装 JZMQ出错 (1).make[1]: * 没有规则可以创建“org/zeromq/ZMQ.class”需要的目标“classdist_noinst.stamp”。 停止
// 修正方法,创建 classdist_noinst.stamp 文件
$ touch src/classdist_noinst.stamp
- make[1]: *** 没有规则可以创建“all”需要的标“org/zeromq/ZMQ$Context.class”。 停止。
make[1]:正在离开目录 `/home/hadoop/Storm/jzmq/
make: *** [all-recursive] 错误 1
// 手动编译
$ cd src/
$ javac -d . org/zeromq/*.java
安装 JAVA
参考 Java 安装和配置
安装 Python
$ wget http://www.python.org/ftp/python/2.6.6/Python-2.6.6.tar.bz2
$ tar –jxvf Python-2.6.6.tar.bz2
$ cd Python-2.6.6
$ ./configure
$ make
$ make install
测试 Python
$ python -V
Python 2.6.6
安装 Storm
需要在 Nimbus 和 Supervisor 机器上安装 Storm
下载 Storm 发行版本
$ wget http://mirrors.shuosc.org/apache/storm/apache-storm-1.1.1/apache-storm-1.1.1.tar.gz
解压到安装目录下
$ tar -vxzf storm-1.1.1.zip
修改 storm.yaml 配置文件
Storm 解压目录下有一个 conf/storm.yaml
文件,用于配置。默认配置在 这里 可以查看。conf/storm.yaml
中的配置选项将覆盖 defaults.yaml
中的默认配置。以下配置选项是必须在 conf/storm.yaml
中进行配置的:
storm.zookeeper.servers: Storm 集群使用的 Zookeeper 集群地址,其格式如下,
如果 Zookeeper 集群使用的不是默认端口,那么还需要配置 storm.zookeeper.port 选项
storm.zookeeper.servers:
- "master"
- "slave1
storm.local.dir: Nimbus 和 Supervisor 进程用于存储少量状态,如 jars、confs 等本地磁盘目录,需要提前创建该目录并给以足够的访问权限。然后在 storm.yaml
中配置该目录
storm.local.dir: "/home/admin/storm/workdir"
java.library.path: Storm 使用的本地库(ZMQ 和 JZMQ)加载路径,默认为 “/usr/local/lib:/opt/local/lib:/usr/lib”,一般来说 ZMQ 和 JZMQ 默认安装在 /usr/local/lib
下,因此不需要配置即可
nimbus.host: Storm 集群 Nimbus 机器地址,各个 Supervisor 工作节点需要知道哪个机器是 Nimbus,以便下载 Topologies 的 jars、confs 等文件
nimbus.host: "master"
supervisor.slots.ports: 对于每个 Supervisor 工作节点,需要配置该工作节点可以运行的 worker 数量。每个 worker 占用一个单独的端口用于接收消息,该配置选项即用于定义哪些端口是可被 worker 使用的。默认情况下,每个节点上可运行4个 worker,分别在6700、6701、6702和6703端口
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
启动 Storm 各个后台进程
Storm 是快速失败(fail-fast)的系统,这样 Storm 才能在任意时刻被停止,并且当进程重启后被正确地恢复执行。这也是为什么 Storm 不在进程内保存状态的原因,即使 Nimbus 或 Supervisors 被重启,运行中的 Topologies 也不会受到影响
以下是启动 Storm 各个后台进程的方式:
- Nimbus: 在 Storm 主控节点上运行
nohup bin/storm nimbus &
,启动 Nimbus 后台程序,并放到后台执行 - Supervisor: 在 Storm 各个工作节点上运行
nohup bin/storm supervisor &
,启动 Supervisor 后台程序,并放到后台执行 - UI: 在 Storm 主控节点上运行
nohup bin/storm ui &
,启动UI后台程序,并放到后台执行,启动后可以通过 http://{nimbus host}:8080 观察集群的 worker 资源使用情况、Topologies 的运行状态等信息。
注意事项:
- Storm 后台进程被启动后,将在 Storm 安装部署目录下的
logs/
子目录下生成各个进程的日志文件 - 经测试,Storm UI 必须和 Storm Nimbus 部署在同一台机器上,否则UI无法正常工作,因为UI进程会检查本机是否存在 Nimbus 链接。
- 为了方便使用,可以将
bin/storm
加入到系统环境变量中。
至此,Storm 集群已经部署、配置完毕,可以向集群提交拓扑运行了。
向集群提交任务
启动 Storm Topology:
$ storm jar allmycode.jar org.me.MyTopology arg1 arg2 arg3
其中,allmycode.jar 是包含 Topology 实现代码的jar包,org.me.MyTopology
的 main()
方法是 Topology 的入口,arg1、arg2和arg3为执行时需要传入的参数。
停止 Storm Topology:
$ storm kill {toponame}
其中,{toponame} 为 Topology 提交到 Storm 集群时指定的任务名称