Storm流式实时计算开源框架(三)
如果运行./configure命令出现问题,参考这里。在./autogen.sh这步如果报错:autogen.sh:error:could not find libtool is required to run autogen.sh,这是因为缺少了libtool,可以用#yum install libtool*来解决。正确设置 JAVA_HOME环境变量安装Java开发包?
2.3安装Java 6
?
?????? 因为刚才为zookeeper已经配置了JDK6,而该单机版zookeeper和Storm安装在同一台Linux机器上,可以共用,所以此处可以省略,不安装。?
?
2.4安装Python2.7.2?
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??
?
2.5安装unzip?
?????? 在CentOS 5中,系统已经自带unzip解压缩工具,不用安装。?
注意事项:?
? ? ? ?1. 如果使用RedHat系列Linux系统,执行以下命令安装unzip:?
? ? ? ? ? ?apt-get install unzip?
2. 如果使用Debian系列Linux系统,执行以下命令安装unzip:?
? ? yum install unzip?
?
3.安装Storm发布版本?
wget http://cloud.github.com/downloads/nathanmarz/storm/storm-0.8.1.zip
unzip storm-0.8.1.zip
mv storm-0.8.1 /usr/local/
ln -s /usr/local/storm-0.8.1/ /usr/local/storm
?
vim /etc/profile
export STORM_HOME=/usr/local/storm-0.8.1
export PATH=$PATH:$STORM_HOME/bin?
?
4.修改storm.yaml配置文件?
文件在/usr/local/storm/conf/storm.yaml内容:
?storm.zookeeper.servers:
???? - 127.0.0.1?
?storm.zookeeper.port: 2181?
?nimbus.host: "127.0.0.1"?
?storm.local.dir: "/tmp/storm"?
?supervisor.slots.ports:
? - 6700
? - 6701
? - 6702
? - 6703
?
到此为止单机版的Storm就安装完毕了。?
? ? ? ?说明一下:storm.local.dir表示storm需要用到的本地目录。nimbus.host表示那一台机器是master机器,即 nimbus。storm.zookeeper.servers表示哪几台机器是zookeeper服务器。storm.zookeeper.port表示zookeeper的端口号,这里一定要与zookeeper配置的端口号一致,否则会出现通信错误,切记切记。当然你也可以配 superevisor.slot.port,supervisor.slots.ports表示supervisor节点的槽数,就是最多能跑几个 worker进程(每个sprout或bolt默认只启动一个worker,但是可以通过conf修改成多个)。?
?
注意事项:?
? ? ? 1.这个脚本文件写的不咋地,所以在配置时一定注意在每一项的开始时要加空格(最好加两个空格),冒号后也必须要加空格,否则storm不认识这个配置文件。?
?
5.启动ZooKeeper和Storm各个后台进程?
? ? ? ?最后一步,启动Storm的所有后台进程。和Zookeeper一样,Storm也是快速失败(fail-fast)的系统,这样Storm才能在 任意时刻被停止,并且当进程重启后被正确地恢复执行。这也是为什么Storm不在进程内保存状态的原因,即使Nimbus或Supervisors被重 启,运行中的Topologies不会受到影响。
?
1. 启动zookeeper:?
单机版直接启动,不用修改什么配置,如集群就需要修改zoo.cfg另一篇文章会讲到,命令如下:
?# /usr/local/zookeeper/bin/zkServer.sh?start?
?
2.以下是启动Storm各个后台进程的方式:?
# bin/storm nimbus(启动主节点)
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
#bin/storm supervisor(启动从节点)
?
# bin/storm ui(启动主节点监控)
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
注意事项:
- Storm后台进程被启动后,将在Storm安装部署目录下的logs/子目录下生成各个进程的日志文件。经测试,Storm UI必须和Storm Nimbus部署在同一台机器上,否则UI无法正常工作,因为UI进程会检查本机是否存在Nimbus链接。为了方便使用,可以将bin/storm加入到系统环境变量中。3.测试单机版。启动ui,可以通过 ip:8080/ 查看运行i情况,下面是我的测试结果:
??? ? ?至此,Storm集群已经部署、配置完毕,可以向集群提交拓扑运行了。?
?
6.?提交拓扑运行?
一、Maven安装配置?
1.安装首先在本地电脑上安装Maven,从maven的官网下载http://maven.apache.org/?
2.到本地解压,然后使用配置的相应目录/apache-maven-3.0.3/conf/ 下的settings.xml文件,因为很多依赖项无法从官网直接下载,故采用私有服务器,本次测试的配置文件见附件settings.xml。测试时,将附件中settings.xml放到覆盖原来系统自带setting.xml即可。?
? ? ? ?settings.xml文件包含有与系统环境相关的配置细节,例如代理配置,远程仓库,localRepository,服务器的认证信息等。其中比较重要的是localRepository本地存储仓库路径,<localRepository>yourlocalRepository Path</localRepository>。?
? ? ? ?setting.xml详解见http://maven.apache.org/settings.html?
3.配置环境变量。windows参考java环境变量的设置,下图是实验中的配置:
?
一定要确定系统变量的Path 中包含了JDK的bin目录,否则会报错!在windows环境下且无法编译通过!
?
4.验证Maven是否配置成功
?二、下载storm-starter 编译,并导入eclipse 工程:
(http://blog.csdn.net/guoqiangma/article/details/7212677)
1. 下载项目。下载strom starter的代码,https://github.com/nathanmarz/storm-starter。(Linux下通过命令:git clone https://github.com/nathanmarz/storm-starter.git)
2. 编译项目。转到项目根目录,使用mvn -f m2-pom.xml package 进行编译
3. 修改pom文件。复制 storm-starter目录下的m2_pom.xml 为pom.xml ,放在与m2_pomxml同一目录下,因为eclipse需要pom.xml。
4. 使用mvn eclipse:eclipse编译成eclipse工程
5. 导入项目。在MyEclipse 中import 选择storm-starter 的路径,一般导入项目后,会需要设置相应的M2_查看工程是否无误,可能会需要配置M2_REPO变量,试验中使用MyEclipse,其版本信息如下:
? ? ? ?其默认M2_REPO变量已经配置好,不用我们重新配置:
6.解决构建时包丢失问题。因为缺少包,Strom-Starter常常构建失败(个人分析认为可能原因有二:一、官方提供的m2_pom.xml文件不完整;二、很多包放在国外的服务器上,被GFW屏蔽无法直接下载),例如,缺少twitter4j包的解决办法:
(http://www.cnblogs.com/zeutrap/archive/2012/10/11/2720528.html)
???? 例如,twitter相关包,修改Storm-Starter的pom文件m2-pom.xml ,修改dependency中twitter4j-core 和 twitter4j-stream两个包的依赖版本,如下:
<dependency>
??? <groupId>org.twitter4j</groupId>
??? <artifactId>twitter4j-core</artifactId>
??? <version>[2.2,)</version>
</dependency>
<dependency>
??? <groupId>org.twitter4j</groupId>
??? <artifactId>twitter4j-stream</artifactId>
??? <version>[2.2,)</version>
</dependency>
?
?????? 最终,在测试环境中,我使用的pom文件如附件pom.xml,使用时直接用其覆盖之前storm-starter项目中的pom.xml文件即可。?
?????? 对项目使用mvn compile命令重新编译,编译成功,截图如下:
? ? ? ?要注意上面的本地模式运行WordCount其实并没有使用到上述安装的Storm运行环境,只是一个storm的虚拟环境下生成运行jar包和测试demo是否正确。那我们怎样将程序运行在刚刚搭建的单机版的环境里面呢,
?
三、提交运行?
1. 拷贝jar包到Storm所在机器上。?
? ? ? 编译无误后,在Storm-starter中target目录如下:
? ? ? ?将storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar,拷贝到虚拟机桌面(其实可以放到虚拟机的任何目录),其在Linux下绝对路径为:/home/warner1/Desktop/storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar
?
2.运行(打印信息太多,分两次截图)?
?
? ? ? ? 运行成功。
?
3.运行状态和结果?
?????? 在Linux中,访问本机的8080端口(Storm默认客户端UI端口),查看运行状态:?
?? ? ? ?Storm不处理计算结果的保存,这是应用代码需要负责的事情,如果数据不大,你可以简单地保存在内存里,也可以每次都更新数据库,也可以采用NoSQL 存储。storm并没有像s4那样提供一个Persist API,根据时间或者容量来做存储输出。这部分事情完全交给用户。数据存储之后的展现,也是你需要自己处理的,storm UI只提供对topology的监控和统计。?
?
结束语?
?????? 本说明主要分为两部分:搭建Storm单机版运行环境和编译生成Storm-Starter的jar包。至此,整个实验过程结束,下一步的工作时完成Storm集群版的配置和运行工作。