zoukankan      html  css  js  c++  java
  • Twitter Storm:单机环境的安装与配置

    Twitter Storm:单机环境的安装与配置

    好久没写博客了,这一段时间一直被导师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
            修正方法,进入src目录,手动编译相关java代码:

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

    5 Storm

      我使用的Storm版本是最新的稳定版0.8.2,下载,解压,修改/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~


    作者:Chenny Chen 
    出处:http://www.cnblogs.com/XjChenny/ 
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

     
    分类: twitter storm
  • 相关阅读:
    基站选址(编程之美2015资格赛)
    2月29日(编程之美2015资格赛)
    跳马
    电子老鼠闯迷宫
    解决按钮重复提交 unbind+bind+setTimeout
    XMLHttpRequest 中 blob类型数据转text
    ExtJs之列表(grid)
    ExtJs之组件(window)
    ExtJs基础
    问题与成长
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3214257.html
Copyright © 2011-2022 走看看