storm有两种操作模式: 本地模式和远程模式。使用本地模式的时候,你可以在你的本地机器上开发测试你的topology, 一切都在你的本地机器上模拟出来; 用远端模式的时候你提交的topology会在一个集群的机器上执行。
一个storm开发环境安装了你使用本地模式开发测试topology; 把topology打包以部署到远端的集群; 提交,终止远端集群上的topology所需要的一切东西。
让我们快速看一下你的机器和远端storm集群之间的关系。storm集群是被一个称作Nimbus的控制节点所管理的。你的机器与nimbus通信以提交topology的代码,运行这个topology,而nimbus会自动在集群内部分发你的topology代码, 分配任务给各个机器。你的机器使用一个称为storm的客户端去和nimbus通信。storm只有在远程模式的时候才有用; 对于用本地模式开发、测试topology来说是没什么用的。
这里介绍一下storm的基本安装和不用lein的storm-starter运行方法。
需要在Nimbus和Supervisor机器上安装Storm的依赖库,具体如下:
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*
git clone https://github.com/nathanmarz/jzmq.git
cd jzmq
./autogen.sh
./configure
make
sudo make install
为了保证JZMQ正常工作,可能需要完成以下配置:
注意事项:
1. 如果运行./configure命令出现问题,参考这里。
2.如果报错autogen.sh: error: could not find libtool. libtool is required to run autogen.sh.
缺少libtool
# yum install libtool*
1. 下载并安装JDK 6,参考这里;
2. 配置JAVA_HOME环境变量;
3. 运行java、javac命令,测试java正常安装。
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
apt-get install unzip
2. 如果使用Debian系列Linux系统,执行以下命令安装unzip:
yum install unzip
# 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
#vi ~/.bashrc
export ZOOKEEPER_HOME="/path/to/zookeeper"
export PATH=$PATH:$ZOOKEEPER_HOME/bin
#cp /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg
sudo mkdir /tmp/zookeeper
sudo mkdir /var/log/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 -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客户端。
./configure
make cli_st
make cli_mt
cli_st 127.0.0.1:2181
cli_mt 127.0.0.1:2181
至此,完成了Zookeeper集群的部署与启动。
注意事项:
自从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
可以使用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
完成之后如图:
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左边显示如下图:
如果使用的是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这两个类找不到,将这两个类的注释取消掉即可。
4. 执行刚才编译的文件。
# storm jar StormStarter.jar storm.starter.ExclamationTopology
如果出现类似下面的文字,说明运行成功!
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环境部署