Storm 单机环境的安装与配置

  • Post author:
  • Post category:其他


好久没写博客了,这一段时间一直被导师push着做毕业设计。由于目前的方向偏向于图像识别检索,毕设打算做一个基于分布式计算平台的图像检索系统,查阅相关资料发现Hadoop不适用于实时的计算环境,而Twitter Storm却能够满足自己的需求。我花了大概3~4天的时间,才将一个单机环境下的Storm平台部署好,期间经历了各种各样的“奇葩”的错误,此外,网上相关的Storm配置文章各种各样,叙述得多少有些不完整,为此我特下下这篇博客,记录整个安装过程,和大家分享。

1 准备阶段

在配置一个Storm环境之前,我们首先需要一个Linux操作系统。我使用的是Ubuntu 12.04,系统最好是全新安装的,以防止各种各种别的问题。因为我手头上有两个版本的Ubuntu:11.10和12.04,。在11.10上安装后,supervisor进程总是抛出异常,也搞不清楚是操作系统版本的问题还是别的软件的影响。因此,为了减少问题的出现,我建议系统使用全新的。此外,尽量保证操作系统处于联网状态,否则Storm在运行时会抛出网络不可达的SocketException。

PS:CentOS也可以,但是我没有在上面尝试过。有兴趣的读者可以自行尝试一下。

Storm需要JVM的支持,选择Java 1.6或者Java 1.7都可以。下面是Java的安装过程与环境变量的配置,如果你不知道的话或者不像去其他地方查阅资料的话,可以参考下面的安装步骤。

1.1(a) Java 1.6的安装与配置

(1)下载,在http://www.oracle.com/technetwork/indexes/downloads里下载需要的linux的java版本

(2)安装(假设下载的文件为java1.6.0_37.bin,放在/home/chenny目录下)

a.将下载的安装文件授权为可以执行:

>>sudo chmod u+x java1.6.0_37.bin

b.改变工作目录到你要安装java的地方,我的是/usr/lib,所以是cd /usr/lib

c.运行安装文件:

>>/home/chenny/java1.6.0_37.bin

(3)环境设置,打开/etc/profile文件:

>>sudo gedit /etc/profile

在文件最后增加如下几行:

export JAVA_HOME=/usr/lib/jdk1.6.0_37
export JRE_HOME=/usr/lib/jdk1.6.0_37/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

(4)替换系统原有的OpenJDK

>>sudo update-alternatives --install /usr/bin/java java /usr/lib/jdk1.6.0_37/bin/java 300
>>sudo update-alternatives --install /usr/bin/javac javac  /usr/lib/jdk1.6.0_37/bin/javac 300
>>sudo update-alternatives --config java

然后输入我们需要的那个JDK作为默认即可。注意,如果在终端中输入命令的时候,系统提示没有权限操作,那我们使用sudo以超级用户的身份运行即可。

(5)注销系统或者重启机器,在终端中键入java -version得到java version “1.6.0_37″的话表示安装好java环境了.

1.1(b)  Java 1.7的安装配置

(1)去官网下载JDK,我下载的版本是最新的,jdk-7u21-linux-i586.tar.gz。

(2)解压其到我们想要存放的目录:

>>sudo mkdir /usr/lib/jvm
>>tar zxvf ./jdk-7u21-linux-i586.tar.gz -C /usr/lib/jvm

(3)此后的步骤与1.1(a)中的(3)-(5)相同。

1.2 Python 2.7+的安装

Ubuntu 12,.04中已经自带了Python 2.7.3,无需再安装;对于其他系统或者Python版本较低的,此步骤需要安装Python 2.7+的版本。

1.3 其他相关软件的安装

在我们安装Storm的过程中,需要其他一些小的软件包,例如,automake、g++、build-essential、uuid-dev、unzip、autoconf等等,这些软件在之后的过程如果缺失的话,会出现相关的提示,那样的话,提示缺少哪些软件,就安装相应的软件包即可。

2 ZooKeeper的安装配置

Ubuntu12.04中自带的有一个zookeeper,不知道干什么用的,不放心的话,可以使用sudo apt-get remove zookeeper先将其移除。我使用的版本是zookeeper 3.3.5,下载之后,我们将其解压到相应位置,为了使用方便,我们可以按照安装Java的过程为ZooKeeper配置环境变量:

>>sudo gedit /etc/profile

在其中添加:

export ZOOKEEPER_HOME=/home/chenny/Storm/zookeeper-3.3.5
export PATH=$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$JRE_HOME/bin:$PATH

将zookeeper-3.4.5/conf目录下面的 zoo_sample.cfg修改为zoo.cfg,配置文件内容如下所示:

tickTime=2000  
dataDir=/home/chenny/Storm/tmp/zookeeper  
clientPort=2181  
initLimit=5  
syncLimit=2  

每个变量的含义可以参见配置文件中的注释。在此不再赘述。使用:

>>zkServer.sh start

来启动ZooKeeper服务器,如果在启动过程中,提示找不到/etc/zookeeper/zoo.cfg这个配置文件,我们就需要将上面修改过的zoo.cfg拷贝到/etc/zookeeper下:

>>sudo cp -R /home/chenny/Storm/zookeeper-3.3.5/conf/zoo.cfg /etc/zookeeper

然后再次启动服务,此时就可以了。然后使用:

>>zkServer.sh status

来查看服务器状态,此时服务器的模式(Mode)应该是standalone。我们可以使用

>>zkCli.sh 

来连接服务器,如果在这个过程中没有抛出异常的话,就说明我们能够正确地配置了Zookeeper。


3 ZeroMQ的安装

我使用的版本是zeromq-2.1.7,下载,解压,进入目录,输入:

>>./autogen.sh
>>./configure  
>>make  
>>sudo make install  

4 jzmq的安装

>>git clone https://github.com/nathanmarz/jzmq.git
>>cd jzmq
>>./autogen.sh
>>./configure
>>make
>>sudo make install

安装时,可能碰到两个错误:


(1).make[1]: *** 没有规则可以创建“org/zeromq/ZMQ.class”需要的目标“classdist_noinst.stamp”。 停止




修正方法,创建classdist_noinst.stamp文件:



touch src/classdist_noinst.stamp  


(2).错误:无法访问 org.zeromq.ZMQ   |   make[1]: *** 没有规则可以创建“all”需要的目标“org/zeromq/ZMQ$Context.class”。 停止。




修正方法,进入src目录,手动编译相关java代码:

javac  ./src/org/zeromq/*.java  

5 Storm

我使用的Storm版本是最新的稳定版0.8.2,下载


wget https://www.dropbox.com/s/fl4kr7w0oc8ihdw/storm-0.8.2.zip

,解压,修改/conf/storm.yaml配置文件:

 storm.zookeeper.servers:
        - "192.168.1.117"
 nimbus.host: "192.168.1.117"
 storm.local.dir: "/home/chenny/Storm/tmp/storm"
 java.library.path: "/usr/local/lib:/opt/local/lib:/usr/lib"
 topology.debug: "true" 

需要注意的是Storm读取此配置文件,要求每一行开始都要有一个空格,每一个冒号后面也要有一个空格,否则就会出现错误,造成启动失败。我们同样可以为Storm添加环境变量,来方便我们的启动、停止。

5.1 启动Storm

>>storm nimbus&
>>storm supervisor&
>>storm ui&

如果我们没有为storm添加环境变量,那么在启动的时候,我们就需要使用绝对路径或相对路径来定位/chenny/Storm/storm-0.8.2/bin/storm这个程序。启动完成后,我们可以使用jps来查看进程状态:

>>jps

在没有运行任务时,我们必须应该要看到5个进程:QuorumPeerMain、nimbus、core、Jps、supervisor。否则就需要检查是否正确地启动,如果启动之后没有过多久就停止了,我们就需要查看~/storm-0.8.2/logs下面的对应的log文件,查看引起异常的原因是什么,然后解决后再次启动。

同时,我们可以在浏览器中输入http://127.0.0.1:8080来进入Storm UI的界面,可以查看Storm运行期间的相关信息。

6 运行第一个Topology程序

网上别的资料介绍了许多方式来编译可执行的Topology程序,我们这里提供一个简单的办法,只需要使用Eclipse和相关的Jar包即可,Ubuntu或者Windows环境下均可。我们需要从github上下载下来一个供初学者学习的storm-starter,同时,我们还需要有commons-collections-3.2.1-bin.tar.gz、twitter4j-2.2.6.zip和storm-0.8.2.zip等软件包,如果没有的话,需要去下载。以Windows XP下的Eclipse为例。首先我们将所有需要的包解压放到桌面,打开Eclipse,新建Java Project,名字任意取,我取名叫做MyFirstStormApp,然后点击Finish。

在MyFirstStormApp上右键,选择Import,然后选择File System:

在From Directory中输入相应的路径或者点击Browse,选择路径:

我们依次展开storm-starter-master/src/jvm/storm,选中jvm文件夹,点击确定,然后勾选jvm,点击finish:

这样,我们就在左侧看到Project的结构:

拖动storm到src中,然后安装同样的方式将storm-starter-master/storm-starter-master/multilang导入到项目中,然后我们就在左侧看到如下图所示的结构:

可以看到上面有很多红叉,此时,我们就需要导入项目所依赖的jar包,在项目上右键,选择Properties,然后Java Build Path,切换到Libraries选项夹下,点击Add External JARs:

将storm-0.8.2/lib目录下的所有jar包都加入到项目中,将commons-collections-3.2.1.jar添加到项目中,将twitter4j-2.2.6/lib中的所有jar包加入到项目中,将storm-0.8.2/storm-0.8.2.jar加入到项目中,然后点击OK,这个时候,可以看到项目中的所有错误都消失了。接下来,我们将PrintSampleStream.java和TwitterSampleSpout.java中的注释取消,或者将这两个文件删除。

在项目上选择Export,然后选择JAR file,在下一页,我们将项目导出,勾选如下图所示:

点击finish后,如果没有错误,只有warning的话,就不用管了,否则我们需要检查错误,然后重新打包。打包后的jar包是MyFirstStormApp.jar,将它拷贝到部署有Storm的机器上,然后在终端中输入:

>>storm jar MyFirstStormApp.jar storm.starter.WordCountTopology test2

如果没有错误,就成功提交了,在浏览器中输入http://127.0.0.1:8080,可以看到这个Topology已经在运行了,点击它的名字,可以进入Topology summary:

如果看到有Emiited等数据,就说明我们正确地完成了配置。Enjoy~