Contents
  1. 1. Apache Storm依赖的软件
  2. 2. 安装OpenJDK
  3. 3. 安装python2, unzip
  4. 4. 安装编译工具
  5. 5. 编译安装ZeroMQ, JZMQ
    1. 5.1. 编译安装ZeroMQ
    2. 5.2. 编译安装JZMQ
    3. 5.3. 安装Apache ZooKeeper
  6. 6. 安装Apache Storm
    1. 6.1. 方法一:使用Arch Linux AUR仓库中的软件包
    2. 6.2. 方法二:使用官方编译好的安装包
  7. 7. 部署Topology到cluster
  8. 8. 使用PHP写Topology示例
    1. 8.1. 安装Apache Storm到本地repository中
    2. 8.2. 基于storm-starter的pom.xml建立 pom.xml 文件
    3. 8.3. 创建maven所需的目录结构
    4. 8.4. 引入storm的PHP支持类文件
    5. 8.5. 实现业务逻辑
    6. 8.6. 编译代码
    7. 8.7. 部署Topolgy

Apache Storm依赖的软件

  1. Java
  2. Python 2.x
  3. unzip
  4. ZeroMQ
  5. JZMQ
  6. Apache ZooKeeper

安装OpenJDK

Arch Linux需要设置JAVA_HOME

1
2
pacman -S extra/jdk8-openjdk
echo "export JAVA_HOME=/usr/lib/jvm/java-8-openjdk" >> /etc/profile.d/jre.sh

安装python2, unzip

1
pacman -S python2 unzip

安装编译工具

Apache Storm 用到 ZeroMQ v2.1.7,而Arch Linux官方软件仓库中的是4.x版本,故ZeroMQ需要使用源码编译安装。

1
pacman -S gcc libtool pkg-config make autoconf git util-linux

编译安装ZeroMQ, JZMQ

编译安装ZeroMQ

1
2
3
4
5
6
curl -O http://download.zeromq.org/zeromq-2.1.7.tar.gz
tar xzvf zeromq-2.1.7.tar.gz
cd zeromq-2.1.7
make
make install
ldconfig # 更新LD_LIBRARY_PATH

编译安装JZMQ

1
2
3
4
5
6
git clone https://github.com/nathanmarz/jzmq.git
cd jzmq
./autogen.sh
./configure --with-zeromq=/usr/local
make
make install

make时可能会出错,解决办法是修改jzmq/src/Makefile.am,将classdist_noinst.stamp修改为classnoinst.stamp

验证libjzmq确实使用的zeromq是自行编译的版本:

1
ldd /usr/local/lib/libjzmq.so

如果libzmq.so.1确实指向/usr/local/lib中的版本,则说明版本使用正确。

安装Apache ZooKeeper

1
2
yaourt -S zookeeper
vi /usr/bin/zkServer.sh

因为zookeeper只对IPv6地址进行监听,为了强制其只监听IPv4地址,需要修改 /usr/bin/zkServer.sh,在nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \后添加一行:
"-Djava.net.preferIPv4Stack=true" \

启动Apache ZooKeeper

1
/usr/bin/zkServer.sh start

安装Apache Storm

方法一:使用Arch Linux AUR仓库中的软件包

1
2
3
4
yaourt -S storm
systemctl start storm-nimbus.service
systemctl start storm-supervisor.service
systemctl start storm-ui.service

方法二:使用官方编译好的安装包

用浏览器打开 http://www.apache.org/dyn/closer.cgi/storm/apache-storm-0.9.3/apache-storm-0.9.3.tar.gz 页面,从中选择一个镜像站下载软件包

1
2
3
curl -O http://mirror.bit.edu.cn/apache/storm/apache-storm-0.9.3/apache-storm-0.9.3.tar.gz
tar xzvf apache-storm-0.9.3.tar.gz
cd apache-storm-0.9.3/bin

使用konsole或gnome-terminal等终端模拟器,在不同的标签页分别执行./storm nimbus, ./storm supervisor, ./storm ui

如果ui启动成功,可以使用浏览器来访问localhost:8080查看整个cluster的状况了

部署Topology到cluster

以官方apache-storm-0.9.3.tar.gz中带的starter为例

1
./storm jar ../examples/storm-starter/storm-starter-topologies-0.9.3.jar storm.starter.ExclamationTopology exclamationTopology

一切顺利的话,可以看到输出:

1
1574 [main] INFO backtype.storm.StormSubmitter - Finished submitting topology: exclamationTopology

如果需要 kill 该 topology,则需要运行

1
./storm kill exclamationTopology

使用PHP写Topology示例

本示例基于storm-starter的word count程序创建。
附件是本示例的完整代码,代码目录结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
joelhy@arminix: /tmp $ tree motiondetect
motiondetect
├── multilang
│   └── resources
│   ├── RandomSentenceSpout.php
│   ├── splitsentence.php
│   └── storm.php
├── pom.xml
└── src
└── surveil
└── motiondetect
└── WordCountTopologyPhp.java
5 directories, 5 files

创建过程说明如下

安装Apache Storm到本地repository中

1
2
3
4
pacman -S maven
git clone git://github.com/apache/storm.git
git checkout v0.9.3
mvn install -DskipTests=true

如果由于下载依赖关系失败等原因导致安装失败,可下载 http://pan.baidu.com/s/1qW6vylY 中的软件包到~/.m2/repository目录中,再重试。

基于storm-starter的pom.xml建立 pom.xml 文件

其中groupId, artifactId, packaging, version, name 是需要修改的

1
2
3
4
5
<groupId>com.example.surveil</groupId>
<artifactId>motiondetect</artifactId>
<packaging>jar</packaging>
<version>0.1</version>
<name>motiondetect</name>

创建maven所需的目录结构

使用mkdir创建如下目录结构

1
2
3
4
5
6
7
joelhy@arminix: /tmp/motiondetect $ tree -d .
.
├── multilang
│   └── resources
└── src
└── surveil
└── motiondetect

引入storm的PHP支持类文件

1
2
cd multilang/resources/
curl -O https://raw.githubusercontent.com/Lazyshot/storm-php/master/lib/storm.php

实现业务逻辑

仿照storm-starter下的nodejs版wordcount
在目录 multilang/resources/ 目录下创建文件RandomSentenceSpout.php, splitsentence.php
在目录 src/surveil/motiondetect/ 中创建文件WordCountTopologyPhp.java
文件的具体内容见附件

编译代码

在motiondetect目录下运行

1
mvn clean install -DskipTests=true

运行完后在motiondetect目录下会生成target目录,里面有编译相关的文件

部署Topolgy

命令行下运行如下命令

1
storm jar target/motiondetect-0.1-jar-with-dependencies.jar surveil.motiondetect.WordCountTopologyNode wc

Contents
  1. 1. Apache Storm依赖的软件
  2. 2. 安装OpenJDK
  3. 3. 安装python2, unzip
  4. 4. 安装编译工具
  5. 5. 编译安装ZeroMQ, JZMQ
    1. 5.1. 编译安装ZeroMQ
    2. 5.2. 编译安装JZMQ
    3. 5.3. 安装Apache ZooKeeper
  6. 6. 安装Apache Storm
    1. 6.1. 方法一:使用Arch Linux AUR仓库中的软件包
    2. 6.2. 方法二:使用官方编译好的安装包
  7. 7. 部署Topology到cluster
  8. 8. 使用PHP写Topology示例
    1. 8.1. 安装Apache Storm到本地repository中
    2. 8.2. 基于storm-starter的pom.xml建立 pom.xml 文件
    3. 8.3. 创建maven所需的目录结构
    4. 8.4. 引入storm的PHP支持类文件
    5. 8.5. 实现业务逻辑
    6. 8.6. 编译代码
    7. 8.7. 部署Topolgy