一、            Storm基本安装

1. 安装python

=================================

# wget http://www.python.org/ftp/python/2.7.2/Python-2.7.2.tgz

# tar zxvf Python-2.7.2.tgz

# cd Python-2.7.2

# ./configure

# make

# make install

# vi /ect/ld.so.conf

--

文件末尾追加

/usr/local/lib

--

#sudo ldconfig

============================

 

2. 安装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

============================

3. 安装zeromq & jzmq

============================

1)安装zeromq

# wget http://download.zeromq.org/historic/zeromq-2.1.7.tar.gz

# tar zxf zeromq-2.1.7.tar.gz

# cd zeromq-2.1.7

# ./configure

**********************

如果报错

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*

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

原因为缺少uuid相关package

解决方法

# yum install uuid*

# yum install e2fsprogs*

# yum install libuuid*

**********************

#make

#make install

更新LD_LIBRARY_PATH

#ldconfig

============================

2)安装jzmq

============================

#yum install git

#git clone git://github.com/nathanmarz/jzmq.git

**********************

如果有proxy的话执行

#git clone http://github.com/nathanmarz/jzmq.git

就能避开git的代理设置

**********************

# cd jzmq

# ./autogen.sh

**********************

如果报错

autogen.sh: error: could not find libtool. libtool is required to run autogen.sh.

缺少libtool

# yum install libtool*

**********************

# ./configure

# make

# make install

============================

4. 安装storm

============================

# wget https://github.com/downloads/nathanmarz/storm/storm-0.7.1.zip

# unzip storm- 0.7.1 zip

# cp -R storm-0.7.1 /usr/local/

# vi ~/.bashrc

--

追加

 export STORM_HOME=/usr/local/storm-0.7.1

 export PATH=$PATH:$STORM_HOME/bin

--

============================

到此为止,storm安装完毕。

二、storm-starter运行

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

1. 编译storm-starter

1)  安装twitter4j

# mkdir twitter4j

# cd twitter4j

# wget http://twitter4j.org/en/twitter4j-2.2.5.zip

# unzip twitter4j-2.2.5.zip

 

2) 追加源文件storm-start/src/jvm/storm

A. 使用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

B.  导入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

注1:导入时,会提示有些包不存在(commons-collections-3.2.1.jar),下载导入即可。

注2:如果使用最新的storm-starter,而storm的版本是低于storm0.9.0的,会出现有些方法参数不匹配的现象,这是由于版本不统一造成的,修改源文件符合当前storm版本的方法即可

4) JAR export

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

5)执行刚才编译的文件

# 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!!!]

....

2. Storm-starter本地运行

这里我们运行Storm-starter项目的wordCount,对于该类而言,如果没有传递参数,则本地运行,传递参数,则是集群运行。这里我们首先介绍本地运行

# storm jar  <打包后的jar包名>.jar  storm.starter.WordCountTopology

3. Storm-starter集群运行

A.         配置zookeepper

配置zookeeper时,注意zoo.cfg注意下面几个参数。改好zoo.cfg文件后,记得在dataDir  = /opt/zookeeper目录下创建myid文件,从1开始,每个服务器加1就行。Storm运行起来之后,可以在zookeeper上看到很多Storm相关的数据。

 

#  vi /usr/local/zookeeper-3.4.5/conf/zoo.cfg 



dataDir=/opt/zookeeper

# the port at which the clients will

connect

clientPort=2181

server.1=172.16.0.235:4887:5887

#第一个节点地址 

server.2=172.16.0.233:4887:5887 #第二个节点地址


B.         配置storm

# vi <storm安装路径>/conf/storm.yaml


storm.zookeeper.servers: 

- "172.16.0.235" 

- "172.16.0.233" 

nimbus.host:"172.16.0.235" 

storm.local.dir:"/opt/storm" ui.port: "18080"

supervisor.slots.ports: 

- 6700 

- 6701 

- 6702 

- 6703 

- 6704 

- 6705

# 注:根据你的cpu的能力可以多几个端口,每一个端口对应storm一个slot,可以运行storm的一个bolt


C.        启动服务

此时,就可以通过http://UI_Server:8080可以打开Storm Web UI看看Storm集群的状态。

 

同时,可以通过命令jps查看各进程运行状态

l  1882 core   对应的进程是Storm UI

l  341 Jps     对应的进程是Java jps

l  1880 nimbus 对应的进程是Storm nimbus

l  18450 supervisor 对应的进程是Storm supervisor

l  27380 worker     对应的线程是Storm main函数里面设置的 conf.setNumWorkers(15) ,所以本例中有15个worker。

l  2112 QuorumPeerMain 对应的进程是zkServer.sh

其中在nimbus上nimbus、 core和 QuorumPeerMain 这三个进程必须启动,如果启动失败,需要研究一下日志中失败的原因,按照上述的顺序再启动一次。否则 会导致下一步的topology提交失败,切记。

 

D.        启动服务


./storm jar storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar

storm.starter.WordCountTopology wordcountTop

注: 使用上面这个命令运行wordcount例子。命令是没错的,但是会提示找不到nimbus服务器,原来是由于Storm的CONF_DIR指定有错误,它会去.storm里面找storm.yaml这个文件,其实这个目录是不存在的。需要编辑bin/storm文件,将CONF_DIR指向正确的目录,具体方法如下:

 # gedit bin/storm

添加:在CONF_DIR后面新增  CONF_DIR = STORM_DIR + "/conf"