-----------------------------------------------------------------------------------------------------------------
Storm搭建
Storm是一个分布式的、容错的实时计算系统,可以方便地在一个计算机集群中编写与扩展复杂的实时计算,Storm用于实时处理,就好比 Hadoop 用于批处理。在Storm 的集群里面有两种节点:控制节点和工作节点。控制节点上面运行一个后台进程Nimbus,它的作用类似于Hadoop 里面的JobTracker。
1、先关闭selinux、防火墙,配好网络、yum源
2、安装开发工具
[root@node1 ~]# yum install java-1.8.0-openjdk*
[root@node1 ~]# yum install gcc
[root@node1 ~]# yum install gcc-c++
[root@node1 ~]# yum install make
[root@node1 ~]# yum install cmake
[root@node1 ~]# yum install openssl-devel
[root@node1 ~]# yum install ncurses-devel
[root@node1 ~]# yum install uuid*
[root@node1 ~]# yum install libtool
[root@node1 ~]# yum install libuuid
[root@node1 ~]# yum install libuuid-devel
3、maven配置
1)下载maven软件包。 
2)解压maven软件包。
[root@node1 ~]# tar xvzf apache-maven-3.8.1-bin.tar.gz
3)把maven软件移到目录/usr/local下
[root@node1 ~]# mv apache-maven-3.8.1 /usr/local/maven
4)编辑环境变量。
[root@node1 ~]# vi /etc/profile
添加内容如下:
export M2_HOME=/usr/local/maven
export M2=$M2_HOME/bin
export MAVEN_OPTS="-Xms256m -Xmx512m"
export PATH="$M2:$PATH"

5)使环境变量生效。
[root@node1 ~]# source /etc/profile
6)检查maven版本,显示如下表示成功。 
7)修改配置文件。
[root@node1 ~]# vim /usr/local/maven/conf/settings.xml
在<mirrors></mirrors> 内添加如下内容:
<mirror>
<id>nexus-osc</id>
<mirrorOf>*</mirrorOf>
<name>Nexusosc</name>
<url>http://maven.oschina.net/content/groups/public/</url>
</mirror>
如下图所示 
在<profiles></profiles> 内添加如下内容:
<profile>
<id>jdk-1.8</id>
<activation>
<jdk>1.8</jdk>
</activation>`
<repositories>
<repository>
<id>nexus</id>
<name>local private nexus</name>
<url>http://maven.oschina.net/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>local private nexus</name>
<url>http://maven.oschina.net/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
部分如图 
4、libcurl-devel配置
yum install libcurl-devel
5、git配置(如果不需要使用git下载软件,这步可以跳过)
1)下载git软件包。

2)解压。
[root@node1 ~]# tar xvzf git-2.9.4.tar.gz
3)配置。
[root@node1 ~]# cd git-2.9.4/
[root@node1 git-2.9.4]# ./configure --with-curl --with-expat
运行成功如图 
4)编译
[root@node1 git-2.9.4]# make
1、本文已修改,此bug仅供参考
出现以下bug时,执行 yum install perl-ExtUtils-MakeMaker package 后重新编译安装  成功如下 
2、本文已修改,此bug仅供参考
节点机出现bug,执行yum install zlib* -y ,重新编译安装  成功如下 
5)安装
[root@node1 git-2.9.4]# make install
运行成功如图 
6)检查git版本

6、python配置
每个节点机都要
1)下载python软件包。

2)解压。
[root@node1 ~]# tar xvzf Python-3.7.1.tgz
3)配置。
[root@node1 ~]# cd Python-3.7.1
[root@node1 Python-3.7.1]# ./configure --prefix=/usr/local/python
运行成功如图 
4)编译。
[root@node1 Python-3.7.1]# make
运行成功如图 
5)安装。
[root@node1 Python-3.7.1]# make install
本文已修改,此bug仅供参考
①出现以下bug时要yum install libffi-devel -y  然后再重新编译下载  成功。
②重新删除包编译下载 
6)设置环境变量。
[root@node1 Python-3.7.1]# vim /etc/profile
添加如下内容:
export PYTHON_HOME=/usr/local/python
export PATH=$PYTHON_HOME/bin:$PATH

7)使环境变量生效。
[root@node1 Python-3.7.1]# source /etc/profile
8)运行python。
[root@node1 Python-3.7.1]# python
 9)复制python到其他节点。 将node1节点机的“/usr/local/python”复制到其他三台节点机上
[root@node1 Python-3.7.1]# cd
[root@node1 ~]# scp -r -p /usr/local/python root@node2:/usr/local/
[root@node1 ~]# scp -r -p /usr/local/python root@node3:/usr/local/
[root@node1 ~]# scp -r -p /usr/local/python root@node4:/usr/local/
7、ZeroMQ配置
1)下载ZeroMQ软件包。 
2)解压。
[root@node1 ~]# tar xvzf zeromq-4.1.8.tar.gz
3)配置。
[root@node1 ~]# cd zeromq-4.1.8
[root@node1 zeromq-4.1.8]# ./configure --prefix=/home/local/zeromq
运行成功如图 
4)编译。
[root@node1 zeromq-4.1.8]# make
运行成功如图 
5)安装。
[root@node1 zeromq-4.1.8]# make install
运行成功如图 
6)更新动态链接库。
[root@node1 zeromq-4.1.8]# ldconfig
7)设置环境变量。
[root@node1 zeromq-4.1.8]# vim /etc/profile
添加如下内容:
export CPPFLAGS=-I/home/local/zeromq/include/
export LDFLAGS=-L/home/local/zeromq/lib/

8)使环境变量生效。
[root@node1 zeromq-4.1.8]# source /etc/profile
8、JZMQ配置
1)下载JZMQ软件包。
[root@node1 ~]# wget https://codeload.github.com/zeromq/jzmq/zip/master
运行成功如图 
2)解压文件。
[root@node1 ~]# unzip master
运行成功如图 
3)配置。
[root@node1 ~]# cd jzmq-master/jzmq-jni/
[root@node1 jzmq-jni]# ./autogen.sh
运行成功如图 
[root@node1 jzmq-jni]# ./configure --prefix=/home/local/jzmq
运行成功如图 
4)编译。
[root@node1 jzmq-jni]# make
运行成功如图 
5)安装。
[root@node1 jzmq-jni]# make install
运行成功如图 
6)设置环境变量。
[root@node1 jzmq-jni]# vim /etc/profile
添加如下内容:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/local/zeromq/lib/:
/home/local/jzmq/lib/

7)使环境变量生效。
[root@node1 jzmq-jni]# source /etc/profile
9、zookeeper配置
1)下载Zookeeper软件包。 
2)解压安装。
[root@node1 ~]# tar xvzf zookeeper-3.4.9.tar.gz
[root@node1 ~]# mv zookeeper-3.4.9.tar.gz /home/local/zookeeper
3)修改用户属性。
[root@node1 ~]# chown -R root:root /home/local/zookeeper/
4)设置环境变量。
[root@node1 ~]# vi /etc/profile
添加如下内容:
export ZOOKEEPER_HOME=/home/local/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin

5)使环境变量生效。
[root@node1 ~]# source /etc/profile
6)参数配置。
[root@node1 ~]# cd /home/local/zookeeper/conf
[root@node1 conf]# mv zoo_sample.cfg zoo.cfg
[root@node1 conf]# vi zoo.cfg
配置文件添加如下内容:
dataDir=/home/local/zookeeper/data
dataLogDir=/home/local/zookeeper/log
clientPort=2181
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
server.4=node4:2888:3888
如图  修改zoo.cfg文件,启用日志自动清理功能。dataDir文件路径有重复,上面的需要注释

7)在$ZOOKEEPER_HOME目录下新建两目录。
[root@node1 conf]# mkdir /home/local/zookeeper/{data,log}
8)在$ZOOKEEPER_HOME/data目录下创建一个文件:myid,myid的内容为上面配置的server.中id数字,不同节点机myid的内容不同。
[root@node1 conf]# cd /home/local/zookeeper/data/
[root@node1 data]# vim myid
[root@node1 data]# more myid
1
10、Storm配置
1)下载Storm软件包。(此版本不包含storm-starter-topologies的jar包,后期做本机拓扑需要去其他低版本包里取,或者直接安装低版本的storm-starter-topologies-0.9.6.jar) 
2)解压安装。
[root@node1 ~]# tar xvzf apache-storm-2.1.0.tar.gz
[root@node1 ~]# mv apache-storm-2.1.0 /home/local/storm
3)修改用户属性。
[root@node1 ~]# chown -R root:root /home/local/storm/
4)设置环境变量。
[root@node1 ~]# vi /etc/profile
文件添加如下内容:
export STORM_HOME=/home/local/storm
export PATH=$PATH:$STORM_HOME/bin

5)使环境变量生效。
[root@node1 ~]# source /etc/profile
6)参数配置。
注意:格式的要求每一项的开始时要加空格,冒号后也必须要加空格。
[root@node1 ~]# cd /home/local/storm/conf
[root@node1 conf]# vi storm.yaml
配置文件添加如下内容:
storm.zookeeper.servers:
- "node1"
- "node2"
- "node3"
- "node4"
nimbus.host: "node1"
storm.local.dir: "/home/local/storm/temp"
storm.zookeeper.port: 2181
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
如图 
7)在$STORM_HOME目录下新建目录temp。
[root@node1 conf]# mkdir /home/local/storm/temp
11、将node1节点机“/home/local/”目录下文件复制到其他三台节点机上。
[root@node1 ~]# scp -r /home/local root@node2:/home/local
[root@node1 ~]# scp -r /home/local root@node3:/home/local
[root@node1 ~]# scp -r /home/local root@node4:/home/local
12、分别登录node2、node3和node4节点机修改环境变量。
[root@node2 ~]# vi /etc/profile
添加如下内容:
export CPPFLAGS=-I/home/local/zeromq/include/
export LDFLAGS=-L/home/local/zeromq/lib/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/local/zeromq/lib/:
/home/local/jzmq/lib/
export ZOOKEEPER_HOME=/home/local/zookeeper
export STORM_HOME=/home/local/storm
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$STORM_HOME/bin

13、分别登录node1、node2、node3、node4节点机,修改$ZOOKEEPER_HOME/data/myid的内容
按照配置文件的server.<id> 中id的数字。node2的值为2,node3的值为3,node4的值为4
[root@node4 ~]# cd $ZOOKEEPER_HOME/data
[root@node4 data]# vim myid
[root@node4 data]# more myid
4
Storm启动
Storm系统搭建完成后,需要启动相关服务,检查运行状态。
1、启动Zookeeper服务。
执行zkServer.sh start启动服务;执行zkServer.sh stop停止服务;执行zkServer.sh status 检查启动情况和模式leader和follower,zookeeper会随机选择一个节点作为leader,其他作为follower。
1)启动服务。
分别以root用户登录node1、node2、node3、node4,启动Zookeeper。
启动失败,针对此bug采用降低3.6.3zookeeper版本的方法,不要超过3.5.5版本,现换成3.4.9
1、本文已修改,此bug仅供参考
 成功解决,运行成功如图 
2)查看四台节点机的服务状态。
出现bug,四台机都显示not running,有几种可能, 第一种是因为四台机没有都开启zookeeper服务; 第二种可能是配置文件dataLogDir文件路径不存在,需要创建; 第三种就是防火墙没关; 第四种是myid文件没写好; 第五种就是配置文件里面有错误(这次就是在zoo.cfg文件中出现了两次dataDir的路径,没注释)
2、本文已修改,此bug仅供参考
 正确的如下   

2、启动Nimbus、Supervisor、UI。
在生产环境中主节点机一般不启动Supervisor进程
[root@node1 ~]# storm nimbus &
[root@node1 ~]# storm supervisor &
[root@node1 ~]# storm ui &
1、本文已修改,此bug仅供参考
若配置文件storm.yaml出现格式错误中间会出现以下结果  运行成功如图   分别登录node2、node3、node4节点机,启动Supervisor进程。
[root@node2 ~]# storm supervisor &
[root@node3 ~]# storm supervisor &
[root@node4 ~]# storm supervisor &
  
3、打开浏览器,在地址栏处输入http://192.168.23.111:8080
查看Storm的运行状况。

4、storm命令使用介绍
1)启动storm命令。
[root@node1 ~]# storm
2)Storm的基本命令如下:
storm activate topology-name #激活指定的拓扑Spout。
storm classpath #打印出Storm客户端运行命令时使用的类路径。
storm deactivate topology-name #禁用指定的拓扑Spout。
storm dev-zookeeper #以dev.zookeeper.path配置的值作为本地目录,
#以storm.zookeeper.port配置的值作为端口,
#启动一个新的ZooKeeper服务,仅用来开发/测试。
storm drpc #启动一个DRPC守护进程。
#该命令应该使用daemontools或者monit工具监控运行。
storm help #打印一条帮助消息或者可用命令的列表。语法如下:
storm help <command> #直接输入不带参数的storm,也可以启动storm help命令。
storm jar topology-jar-path class ... #运行类的指定参数的main方法。
#把Storm的jar文件和“~/.storm”的配置放到类路径中,
#以便当拓扑提交时,StormSubmitter会上传
#topology-jar-path的jar文件。
storm kill topology-name [-w wait-time-secs] #杀死名为topology-name的拓扑。
#Storm首先会在拓扑的消息超时时间期间禁用Spout,
#以允许所有正在处理的消息完成处理。然后,Storm将会
#关闭Worker并清理它们的状态。可以使用-w标记覆盖
#Storm在禁用与关闭期间等待的时间长度。
storm list #列出正在运行的拓扑及其状态。
storm localconfvalue conf-name #打印出本地Storm配置的conf-name的值。
#本地Storm配置是~/.storm/storm.yaml
#与defaults.yaml合并的结果。
storm logviewer #启动Logviewer守护进程。
#Logviewer提供一个Web接口查看Storm日志文件。
#该命令应该使用daemontools或者monit工具监控运行。
storm nimbus #启动Nimbus守护进程。
#该命令应该使用daemontools或者monit工具监控运行。
storm rebalance topology-name [-w wait-time-secs]
#有时你可能希望扩散一些正在运行的拓扑的worker。例如,
#假设你有一个10个节点的集群,每个节点运行4个worker,
#然后假设需要添加另外10个节点到集群中。你可能希望有
#Spout扩散正在运行中的拓扑的worker,这样每个节点运行
#两个worker。解决的一种方法是杀死拓扑并重新提交拓扑,
#但Storm提供了一个rebalance的命令,我们可以用一种
#更简单的方法来做到这一点。rebalance首先会在消息超时
#时间内禁用拓扑,使用-w可以覆盖超时时间,然后重新均
#衡分配集群的worker,拓扑会返回到它原来的状态,即
#禁用的拓扑仍将禁用,激活的拓扑继续激活。
storm remoteconfvalue conf-name #打印出远程集群Storm配置的conf-name的值。
#集群Storm配置是$STORM-PATH/conf/storm.yaml与
#defaults.yaml合并的结果。该命令必须在集群节点上运行
storm repl #打开一个包含类路径中的jar文件和配置的Clojure REPL,
#以便调试时使用。
#Clojure可以作为一种脚本语言内嵌到Java中,但是Clojure
#的首选编程方式是使用REPL,REPL是一个简单的命令行接口。
#使用REPL,可以输入命令并执行,然后查看结果。
storm shell resourcesdir command args #执行Shell脚本。
storm supervisor #启动Supervisor守护进程。
storm ui #启动UI守护进程。
#UI为Storm集群提供了一个Web界面并显示运行拓扑的详细
#统计信息。该命令应该使用daemontools或者monit工具监控
#运行。
storm version #打印Storm发布的版本号。
|