欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Storm流式实时计算开源框架(三)

程序员文章站 2022-07-13 17:06:54
...

      本文讲述Twitter Storm安装配置,也作为学习笔记。 storm的官方安装说明(e文):https://github.com/nathanmarz/storm/wiki/Setting-up-a-Storm-cluster 。 storm的安装分为单机版和集群版,只是配置稍微有点区别,大致一样。这一章节将详细描述如何搭建一个Storm集群。下面是接下来需要依次完成的安装步骤: 

  • 搭建Zookeeper集群;
  • 安装Storm依赖库;
  • 下载并解压Storm发布版本;
  • 修改storm.yaml配置文件;
  • 启动Storm各个后台进程。 

 1.搭建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或以上,详细安装步骤见文件Linux下安装jdk1.6.doc。 

2)安装zookeeper 

wget http://labs.mop.com/apache-mirror/zookeeper/zookeeper-3.3.5/zookeeper-3.3.5.tar.gz
tar -zxvf zookeeper-3.3.5.tar.gz
cp -R zookeeper-3.3.5 /usr/local/
ln -s /usr/local/zookeeper-3.3.5/ /usr/local/zookeeper

 

vim /etc/profile (设置ZOOKEEPER_HOME和ZOOKEEPER_HOME/bin)
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 (用zoo_sample.cfg制作$ZOOKEEPER_HOME/conf/zoo.cfg)
mkdir /tmp/zookeeper
mkdir /var/log/zookeeper 

zookeeper的单机安装已经完成了。 

注意事项: 

  • 由于Zookeeper是快速失败(fail-fast)的,且遇到任何错误情况,进程均会退出,因此,最好能通过监控程序将Zookeeper管理起来,保证Zookeeper退出后能被自动重启。详情参考这里
  • Zookeeper运行过程中会在dataDir目录下生成很多日志和快照文件,而Zookeeper运行进程并不负责定期清理合并这些文件,导致占用大量磁盘空间,因此,需要通过cron等方式定期清除没用的日志和快照文件。详情参考这里。 具体命令格式如下:java -cp zookeeper.jar:log4j.jar:conf org.apache.zookeeper.server.PurgeTxnLog <dataDir> <snapDir> -n <count>
  • 根据Zookeeper集群的负载情况,合理设置Java堆大小,尽可能避免发生swap,导致Zookeeper性能下降。保守期间,4GB内存的机器可以为Zookeeper分配3GB最大堆空间。

 2 .安装Storm依赖库 

      接下来,需要在Nimbus和Supervisor机器上安装Storm的依赖库,具体如下: 

 以上依赖库的版本是经过Storm测试的,Storm并不能保证在其他版本的Java或Python库下可运行。 

 

2.1安装ZeroMQ 2.2.0 

      jzmq的安装貌似是依赖zeromq的,所以应该先装zeromq,再装jzmq。
      开始安装: 

wget http://download.zeromq.org/zeromq-2.2.0.tar.gz
tar zxf zeromq-2.2.0.tar.gz
cd zeromq-2.2.0
./configure
make
make install

 

zeromq安装完成。

注意事项: 

如果遇到Error:cannot link with -luuid, install uuid-dev,原因为缺少uuid相关package: 

# yum install uuid* 

# yum install e2fsprogs* 

# yum install libuuid* 

 

2.2安装JZMQ 

下载后编译安装JZMQ: 

yum install git
git clone git://github.com/nathanmarz/jzmq.git
cd jzmq
./autogen.sh
./configure
make
make install


然后,jzmq就装好了。 

注意事项:

  • 如果没有安装git工具,请参照文件CentOS 5 上安装git.docx,该文件步骤经过检验,安装成功后可以测试:
Storm流式实时计算开源框架(三)
            
    
    博客分类: storm 实时计算分布式开源JavaStorm 
  • 如果运行./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.启动ZooKeeperStorm各个后台进程 

       最后一步,启动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(启动主节点)

Storm流式实时计算开源框架(三)
            
    
    博客分类: storm 实时计算分布式开源JavaStorm 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#bin/storm supervisor(启动从节点)

Storm流式实时计算开源框架(三)
            
    
    博客分类: storm 实时计算分布式开源JavaStorm 

 

# bin/storm ui(启动主节点监控)

Storm流式实时计算开源框架(三)
            
    
    博客分类: storm 实时计算分布式开源JavaStorm 
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

注意事项:

  • Storm后台进程被启动后,将在Storm安装部署目录下的logs/子目录下生成各个进程的日志文件。
  • 经测试,Storm UI必须和Storm Nimbus部署在同一台机器上,否则UI无法正常工作,因为UI进程会检查本机是否存在Nimbus链接。
  • 为了方便使用,可以将bin/storm加入到系统环境变量中。
3.测试单机版。启动ui,可以通过 ip:8080/ 查看运行i情况,下面是我的测试结果:

Storm流式实时计算开源框架(三)
            
    
    博客分类: storm 实时计算分布式开源JavaStorm 
       至此,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环境变量的设置,下图是实验中的配置:

Storm流式实时计算开源框架(三)
            
    
    博客分类: storm 实时计算分布式开源JavaStorm 
Storm流式实时计算开源框架(三)
            
    
    博客分类: storm 实时计算分布式开源JavaStorm  

一定要确定系统变量的Path 中包含了JDK的bin目录,否则会报错!在windows环境下且无法编译通过!

 

4.验证Maven是否配置成功

Storm流式实时计算开源框架(三)
            
    
    博客分类: storm 实时计算分布式开源JavaStorm 
 二、下载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,其版本信息如下:


Storm流式实时计算开源框架(三)
            
    
    博客分类: storm 实时计算分布式开源JavaStorm 
       其默认M2_REPO变量已经配置好,不用我们重新配置:

Storm流式实时计算开源框架(三)
            
    
    博客分类: storm 实时计算分布式开源JavaStorm 

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命令重新编译,编译成功,截图如下:

Storm流式实时计算开源框架(三)
            
    
    博客分类: storm 实时计算分布式开源JavaStorm 
       要注意上面的本地模式运行WordCount其实并没有使用到上述安装的Storm运行环境,只是一个storm的虚拟环境下生成运行jar包和测试demo是否正确。那我们怎样将程序运行在刚刚搭建的单机版的环境里面呢,

 

三、提交运行 

1. 拷贝jar包到Storm所在机器上。 

      编译无误后,在Storm-starter中target目录如下:

Storm流式实时计算开源框架(三)
            
    
    博客分类: storm 实时计算分布式开源JavaStorm 

       将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.运行(打印信息太多,分两次截图) 

Storm流式实时计算开源框架(三)
            
    
    博客分类: storm 实时计算分布式开源JavaStorm  Storm流式实时计算开源框架(三)
            
    
    博客分类: storm 实时计算分布式开源JavaStorm 
        运行成功。

 

3.运行状态和结果 

       在Linux中,访问本机的8080端口(Storm默认客户端UI端口),查看运行状态: 

Storm流式实时计算开源框架(三)
            
    
    博客分类: storm 实时计算分布式开源JavaStorm 
        Storm不处理计算结果的保存,这是应用代码需要负责的事情,如果数据不大,你可以简单地保存在内存里,也可以每次都更新数据库,也可以采用NoSQL 存储。storm并没有像s4那样提供一个Persist API,根据时间或者容量来做存储输出。这部分事情完全交给用户。数据存储之后的展现,也是你需要自己处理的,storm UI只提供对topology的监控和统计。 

 

结束语 

       本说明主要分为两部分:搭建Storm单机版运行环境和编译生成Storm-Starter的jar包。至此,整个实验过程结束,下一步的工作时完成Storm集群版的配置和运行工作。

  • Storm流式实时计算开源框架(三)
            
    
    博客分类: storm 实时计算分布式开源JavaStorm 
  • 大小: 5 KB
  • Storm流式实时计算开源框架(三)
            
    
    博客分类: storm 实时计算分布式开源JavaStorm 
  • 大小: 76.1 KB
  • Storm流式实时计算开源框架(三)
            
    
    博客分类: storm 实时计算分布式开源JavaStorm 
  • 大小: 68 KB
  • Storm流式实时计算开源框架(三)
            
    
    博客分类: storm 实时计算分布式开源JavaStorm 
  • 大小: 62.2 KB
  • Storm流式实时计算开源框架(三)
            
    
    博客分类: storm 实时计算分布式开源JavaStorm 
  • 大小: 49.3 KB
  • Storm流式实时计算开源框架(三)
            
    
    博客分类: storm 实时计算分布式开源JavaStorm 
  • 大小: 5.8 KB
  • Storm流式实时计算开源框架(三)
            
    
    博客分类: storm 实时计算分布式开源JavaStorm 
  • 大小: 5.9 KB
  • Storm流式实时计算开源框架(三)
            
    
    博客分类: storm 实时计算分布式开源JavaStorm 
  • 大小: 6.9 KB
  • Storm流式实时计算开源框架(三)
            
    
    博客分类: storm 实时计算分布式开源JavaStorm 
  • 大小: 94.1 KB
  • Storm流式实时计算开源框架(三)
            
    
    博客分类: storm 实时计算分布式开源JavaStorm 
  • 大小: 2.8 KB
  • Storm流式实时计算开源框架(三)
            
    
    博客分类: storm 实时计算分布式开源JavaStorm 
  • 大小: 39.2 KB
  • Storm流式实时计算开源框架(三)
            
    
    博客分类: storm 实时计算分布式开源JavaStorm 
  • 大小: 7.5 KB
  • Storm流式实时计算开源框架(三)
            
    
    博客分类: storm 实时计算分布式开源JavaStorm 
  • 大小: 63.3 KB
  • Storm流式实时计算开源框架(三)
            
    
    博客分类: storm 实时计算分布式开源JavaStorm 
  • 大小: 69.7 KB
  • Storm流式实时计算开源框架(三)
            
    
    博客分类: storm 实时计算分布式开源JavaStorm 
  • 大小: 52.8 KB