twitter storm安装和storm-start的本地运行

storm有两种操作模式: 本地模式和远程模式。使用本地模式的时候,你可以在你的本地机器上开发测试你的topology, 一切都在你的本地机器上模拟出来; 用远端模式的时候你提交的topology会在一个集群的机器上执行。

一个storm开发环境安装了你使用本地模式开发测试topology; 把topology打包以部署到远端的集群; 提交,终止远端集群上的topology所需要的一切东西。

让我们快速看一下你的机器和远端storm集群之间的关系。storm集群是被一个称作Nimbus的控制节点所管理的。你的机器与nimbus通信以提交topology的代码,运行这个topology,而nimbus会自动在集群内部分发你的topology代码, 分配任务给各个机器。你的机器使用一个称为storm的客户端去和nimbus通信。storm只有在远程模式的时候才有用; 对于用本地模式开发、测试topology来说是没什么用的。

这里介绍一下storm的基本安装和不用lein的storm-starter运行方法。

1. 安装Storm依赖库

需要在Nimbus和Supervisor机器上安装Storm的依赖库,具体如下:

  1. ZeroMQ 2.1.7 – 请勿使用2.1.10版本,因为该版本的一些严重bug会导致Storm集群运行时出现奇怪的问题。少数用户在2.1.7版本会遇到"IllegalArgumentException"的异常,此时降为2.1.4版本可修复这一问题。
  2. JZMQ
  3. Java 6
  4. Python 2.6.6
  5. unzip
以上依赖库的版本是经过Storm测试的,Storm并不能保证在其他版本的Java或Python库下可运行。

1.1 安装ZMQ2.1.7

下载后编译安装ZMQ:
wget http://download.zeromq.org/zeromq-2.1.7.tar.gz
tar -xzf zeromq-2.1.7.tar.gz
cd zeromq-2.1.7
./configure
make
sudo make install

注意事项:

1. 如果安装过程报错uuid找不到,则通过如下的包安装uuid库:

sudo yum install e2fsprogsl  -b current
sudo yum install e2fsprogs-devel  -b current

2.如果报错

configure: error: in `/usr/local/download/zeromq-2.1.7':

configure: error: no acceptable C compiler found in $PATH

See `config.log' for more details

原因为没有安装c compiler

解决方法

# yum install gcc*

3.如果遇到Error:cannot link with -luuid, install uuid-dev

原因为缺少uuid相关package

解决方法

# yum install uuid*

# yum install e2fsprogs*

# yum install libuuid*

1.2. 安装JZMQ

下载后编译安装JZMQ:
git clone https://github.com/nathanmarz/jzmq.git
cd jzmq
./autogen.sh
./configure
make
sudo make install

为了保证JZMQ正常工作,可能需要完成以下配置:

  1. 正确设置 JAVA_HOME环境变量
  1. 安装Java开发包
  1. 升级autoconf
  1. 如果你是Mac OSX,参考这里

注意事项:

1. 如果运行./configure命令出现问题,参考这里。

2.如果报错autogen.sh: error: could not find libtool. libtool is required to run autogen.sh.

缺少libtool

# yum install libtool*

1.3. 安装Java6

1. 下载并安装JDK 6,参考这里;

2. 配置JAVA_HOME环境变量;

3. 运行java、javac命令,测试java正常安装。

1.4. 安装python2.7.2

1. 下载Python2.6.6:

wget http://www.python.org/ftp/python/2.6.6/Python-2.6.6.tar.bz2

2. 编译安装Python2.6.6:

tar –jxvf Python-2.6.6.tar.bz2
cd Python-2.6.6
./configure
make
make install

3. 测试Python2.6.6:

$ python -V
Python 2.6.6

1.5. 安装unzip

1. 如果使用RedHat系列Linux系统,执行以下命令安装unzip:
apt-get install unzip
2. 如果使用Debian系列Linux系统,执行以下命令安装unzip:
yum install unzip

2. 安装Zookeeper

2.1. 安装Zookeeper

# wget http://ftp.meisei-u.ac.jp/mirror/apache/dist//zookeeper/zookeeper-3.3.3/zookeeper-3.3.3.tar.gz
# tar zxf zookeeper-3.3.3.tar.gz
# cp -R zookeeper-3.3.3 /usr/local/
# ln -s /usr/local/zookeeper-3.3.3/ /usr/local/zookeeper

设置 ZOOKEEPER_HOME 和$ZOOKEEPER_HOME/bin
#vi ~/.bashrc
 
    
 
    
 
   
追加
export ZOOKEEPER_HOME="/path/to/zookeeper"
export PATH=$PATH:$ZOOKEEPER_HOME/bin
用zoo_sample.cfg制作$ZOOKEEPER_HOME/conf/zoo.cfg
#cp /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg
制作dataLogDir和运行Dir 
sudo mkdir /tmp/zookeeper
sudo mkdir /var/log/zookeeper

2.2.. 搭建Zookeeper集群

Storm使用Zookeeper协调集群,由于Zookeeper并不用于消息传递,所以Storm给Zookeeper带来的压力相当低。大多数情况下,单个节点的Zookeeper集群足够胜任,不过为了确保故障恢复或者部署大规模Storm集群,可能需要更大规模节点的Zookeeper集群(对于Zookeeper集群的话,官方推荐的最小节点数为3个)。在Zookeeper集群的每台机器上完成以下安装部署步骤:

1)下载安装Java JDK,官方下载链接为http://java.sun.com/javase/downloads/index.jsp,JDK版本为JDK 6或以上。

2)根据Zookeeper集群的负载情况,合理设置Java堆大小,尽可能避免发生swap,导致Zookeeper性能下降。保守期间,4GB内存的机器可以为Zookeeper分配3GB最大堆空间。

3)下载后解压安装Zookeeper包,官方下载链接为http://hadoop.apache.org/zookeeper/releases.html。

4)根据Zookeeper集群节点情况,创建如下格式的Zookeeper配置文件zoo.cfg:

tickTime=2000
dataDir=/var/zookeeper/
clientPort=2181
initLimit=5
syncLimit=2
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888

其中,dataDir指定Zookeeper的数据文件目录;其中server.id=host:port:port,id是为每个Zookeeper节点的编号,保存在dataDir目录下的myid文件中,zoo1~zoo3表示各个Zookeeper节点的hostname,第一个port是用于连接leader的端口,第二个port是用于leader选举的端口。

5)在dataDir目录下创建myid文件,文件中只包含一行,且内容为该节点对应的server.id中的id编号。

6)启动Zookeeper服务:

java -cp zookeeper.jar:lib/log4j-1.2.15.jar:conf \ org.apache.zookeeper.server.quorum.QuorumPeerMain zoo.cfg

也可以通过bin/zkServer.sh脚本启动Zookeeper服务。

7)通过Zookeeper客户端测试服务是否可用:

  • Java客户端下,执行如下命令:

java -cp zookeeper.jar:src/java/lib/log4j-1.2.15.jar:conf:src/java/lib/jline-0.9.94.jar \ org.apache.zookeeper.ZooKeeperMain -server 127.0.0.1:2181

也可以通过bin/zkCli.sh脚本启动Zookeeper Java客户端。

  • C客户端下,进入src/c目录下,编译单线程或多线程客户端:
./configure
make cli_st
make cli_mt
运行进入C客户端:
cli_st 127.0.0.1:2181
cli_mt 127.0.0.1:2181

至此,完成了Zookeeper集群的部署与启动。

注意事项:

  1. 由于Zookeeper是快速失败(fail-fast)的,且遇到任何错误情况,进程均会退出,因此,最好能通过监控程序将Zookeeper管理起来,保证Zookeeper退出后能被自动重启。详情参考这里。
  2. Zookeeper运行过程中会在dataDir目录下生成很多日志和快照文件,而Zookeeper运行进程并不负责定期清理合并这些文件,导致占用大量磁盘空间,因此,需要通过cron等方式定期清除没用的日志和快照文件。详情参考这里。具体命令格式如下:java -cp zookeeper.jar:log4j.jar:conf org.apache.zookeeper.server.PurgeTxnLog -n

3. 安装storm

需要在Nimbus和Supervisor机器上安装Storm发行版本。

自从Github不提供下载功能之后,Twitter Storm的release都被放到了Dropbox上面,由于大家都知道的原因,不那啥一下你是访问不到了,这里有一个下载镜像:http://xumingming.sinaapp.com/twitter-storm-downloads-cn-mirror/,当前的稳定版本是0.8.2。
如果你想从你的机器提交topology给远端的storm集群, 你应该在你的本地安装一个storm发行版。安装了storm发行版之后你会得到你和远端集群通信的工具: storm。为了在本地安装storm, 从上面的链接中下载代码,并且把它解压到你机器上的一个目录。然后把bin/目录添加到环境变量PATH里面去并且使bin/storm有可执行权限。

unzip storm-0.8.2.zip
export STORM_HOME=/usr/local/storm-0.8.2
export PATH=$STORM_HOME/bin:xxx:xxx:$PATH

4. 本地运行测试程序storm-starter

下载并解压:https://github.com/nathanmarz/storm-starter
执行这个程序需要用lein,这里介绍的方法用eclipse代替lein的作用。

可以使用maven或lein来解决storm-starter的包依赖问题,但是由于GFW原因,可能有些依赖包无法获取。故这里采用eclipse自导入包的方法来编译storm-starter
1)  安装twitter4j

# mkdir twitter4j
# cd twitter4j
# wget http://twitter4j.org/en/twitter4j-2.2.6.zip
# unzip twitter4j-2.2.6.zip

很有可能下载不了,在网上搜一搜。

2) 追加源文件storm-start/src/jvm/storm
    使用eclipse建立java project。追加twitter4j和storm的jar文件。
    File-> New -> Java Project ->随便取个名字-> Next -> Libraries -> add External JARs...-> 追加twitter4j和storm的jar文件(/path/to/twitter4j/lib/*.jar和/path/to/storm/lib/*.jar和/path/to/storm/storm-{version}.jar)-> Finsh
    导入storm-start
    File -> Import -> General -> File System -> Next -> Browse(From directory) -> /path/to/storm-start/src/jvm/storm -> Browse(Info floder)  -> xxx -> src -> OK -> “storm” 和 “Create top-level folder”前打勾 -> Finish
完成之后如图:
twitter storm安装和storm-start的本地运行_第1张图片
3) 追加源文件storm-start/multilang/resources(python 文件word count用)
    File -> Import -> General -> File System -> Next -> Browse(From directory) -> /path/to/storm-start/multilang/resources -> Browse(Info floder)  -> xxx -> OK -> check “resources” and “Create top-level folder” -> Finish
2个源文件都追加好之后,eclipse左边显示如下图:
twitter storm安装和storm-start的本地运行_第2张图片
如果使用的是storm-0.8.1,下面这行代码会报错,下载0.8.2版本即可解决

import backtype.storm.task.IMetricsContext;

如果下面这行报错,说明没有commons-collections.jar包,下载地址:http://commons.apache.org/proper/commons-collections/download_collections.cgi

import org.apache.commons.collections.buffer.CircularFifoBuffer;

4) JAR export
    File -> Export -> JAR -> JAR file -> 取消 “.classpath” ,“.project” 和 “<.settings” ->的勾 browse -> path/to/export/name.jar -> Finish (忽视 warnings)

可能会报错说PrintSampleStream和TwitterSampleSpout这两个类找不到,将这两个类的注释取消掉即可。
twitter storm安装和storm-start的本地运行_第3张图片
4. 执行刚才编译的文件。

# storm jar StormStarter.jar storm.starter.ExclamationTopology
如果出现类似下面的文字,说明运行成功!
....
11367 [Thread-25] INFO  backtype.storm.daemon.task  - Emitting: class storm.starter.ExclamationTopology$ExclamationBolt source: 2:3, stream: 1, id: {}, [golda!!!]
....


参考链接:

https://github.com/nathanmarz/storm/

https://github.com/nathanmarz/storm/wiki

https://github.com/nathanmarz/storm/wiki/Setting-up-development-environment

https://github.com/nathanmarz/storm-starter/

Twitter Storm下载中文镜像
Twitter Storm: 配置开发环境

Storm集群安装部署步骤【详细版】

centos的twitter storm安装和storm-start的本地运行

Storm 环境配置及Storm starter运行

Storm环境部署




你可能感兴趣的:(实时流计算/Storm)