Storm安装步骤和部署实战

Storm是twitter开源的一个分布式的,容错的实时计算系统,用Clojure语言编写。与Hadoop的批处理不同,strorm用于流式数据的实时计算,在计算时就将结果以流的形式输出给用户。引用Storm的主要开发者Nathan Marz的话

Storm可以方便地在一个计算机集群中编写与扩展复杂的实时计算,Storm之于实时处理,就好比Hadoop之于批处理。Storm保证每个消息都会得到处理,而且它很快——在一个小集群中,每秒可以处理数以百万计的消息。更棒的是你可以使用任意编程语言来做开发。

本文主要介绍从零开始安装和部署Storm运行环境。Storm依赖的软件包有:ZeroMQJZMQZookeeper, Java和Python等。

1. 安装Python

wget http://www.python.org/ftp/python/2.7.2/Python-2.7.2.tgz
tar zxf Python-2.7.2.tgz
cd Python-2.7.2
./configure && make && sudo make install
export PATH=/home/hadoop/Python-2.7.2/python:$PATH (加到.bashrc里面)
cd /usr/bin
sudo rm python
sudo ln -s /home/hadoop/Python-2.7.2/python python (建立软链接)

执行/usr/bin/python -v显示是2.7.2版本就说明Python安装成功了。

2. 安装Zookeeper

wget http://archive.apache.org/dist/zookeeper/zookeeper-3.3.3/zookeeper-3.3.3.tar.gz
tar zxf zookeeper-3.3.3.tar.gz
cd zookeeper-3.3.3/conf
cp zoo_sample.cfg zoo.cfg

修改zoo.cfg中的 dataDir=/home/hadoop/zookeeper-3.3.3/data
~/zookeeper-3.3.3/bin/zkServer.sh start

执行 bin/zkCli.sh 验证是否能连上zookeeper,输入 ls / 可以查看根节点信息。

3. 安装Zeromq

wget http://download.zeromq.org/zeromq-2.1.7.zip
unzip zeromq-2.1.7.zip
cd zeromq-2.1.7
./configure && make && sudo make install

如果安装到指定目录:./configure –prefix=$HOME/soft

4. 安装Jzmq

wget https://github.com/nathanmarz/jzmq/zipball/master --no-check-certificate
unzip master
cd nathanmarz-jzmq-dd3327d
./autogen.sh
./configure && make && sudo make install

如果安装到指定目录和指定zeromq的安装位置:./configure –prefix=$HOME/soft –with-zeromq=$HOME/soft
不指定zeromq会报错:configure: error: cannot find zmq.h

5. 安装和配置Storm

wget https://github.com/downloads/nathanmarz/storm/storm-0.8.1.zip --no-check-certificate
unzip storm-0.8.1.zip</pre>

在storm-0.8.1/conf下是storm唯一的配置文件storm.yaml,可以修改成:

java.library.path: "/home/hadoop/soft/lib" (如果zeromq和jzmq是安装在指定目录)
storm.zookeeper.servers:
     - "10.232.1.1"
storm.zookeeper.port: 2181 (zk端口默认是2181)
nimbus.host: "10.232.1.1"
ui.port: 8080 (默认就是8080端口,注意不要端口冲突)
storm.local.dir: "/home/hadoop/storm-0.8.1/data"

此外,用 supervisor.slots.ports 参数可以指定一台机器运行多少workers。更多的Storm配置参数见: github上的defaults.yaml

执行 ./bin/storm 会显示storm的参数说明

6. 启动Storm

启动nimbus: nohup bin/storm nimbus &
启动UI: nohup bin/storm ui &
查看UI: http://10.231.1.1:8080/
启动supervisor: nohup bin/storm supervisor &

三个进程如果都启动在一台机器就是单机模式了。对于部署storm集群来说, 只需要按前面的步骤在每台机器上部署好。然后一般是把nimbus和ui运行在同一台机器上,supervisor在其他机器上启动。

通过 ps aux 可以看到storm.ui,nimbus,supervisor进程已经启动了。

7. 编译Storm例子程序

github上有个Storm的例子storm-starter。如果不想安装levin,可以用mvn打包。

git clone https://github.com/nathanmarz/storm-starter
cd storm-starter/
mvn -f m2-pom.xml package</pre>

居然编译报错了,看log是在下载twitter4j-core和twitter4j-stream两个包的时候Connection reset,网上搜了下说是twitter4j被伟大的GFW给墙了。

解决方法是修改m2-pom.xml:

(1) 修改dependency中twitter4j-core和twitter4j-stream两个包的依赖版本,如下:

<dependency>
    <groupId>org.twitter4j</groupId>
    <artifactId>twitter4j-core</artifactId>
    <version>[2.2,)</version>
</dependency>
<dependency>
    <groupId>org.twitter4j</groupId>
    <artifactId>twitter4j-stream</artifactId>
    <version>[2.2,)</version>
</dependency>

(2) 还可以删除twitter4j这个仓库以加快下载速度

<repository>
    <id>twitter4j</id>
    <url>http://twitter4j.org/maven2</url>
</repository>

重新执行 mvn -f m2-pom.xml package 打包成功后在target目录下会生成两个jar包storm-starter-0.0.1-SNAPSHOT.jar和包含了依赖jar包的storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar。

8. 提交任务

终于到了可以提交任务的时候了。

~/storm-0.8.1/bin/storm jar storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar storm.starter.WordCountTopology WordCount_baoniu

最后一个参数是Topology的名字,此时在Web UI上就可以看到名为WordCount_baoniu的Topology正在运行。如下图: storm ui

在页面上点Topology的名字“WordCount_baoniu”后可以看到更多信息: storm ui topology

停止Storm Topology:

storm kill WordCount_baoniu

9. 参考资料

  1. https://github.com/nathanmarz/storm/wiki/Tutorial
  2. https://github.com/nathanmarz/storm/wiki/Setting-up-a-Storm-cluster

发表评论

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