Storm 安装和配置

需要依次完成的安装步骤:

  • 搭建 Zookeeper 集群
  • 安装 Storm 依赖库
  • 安装 Storm
  • 配置 storm.yaml
  • 启动 Storm 各个后台进程

搭建 Zookeeper 集群

参考 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
  1. 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.MyTopologymain() 方法是 Topology 的入口,arg1、arg2和arg3为执行时需要传入的参数。

停止 Storm Topology:

$ storm kill {toponame}

其中,{toponame} 为 Topology 提交到 Storm 集群时指定的任务名称

Add a Comment

电子邮件地址不会被公开。 必填项已用*标注