zoukankan      html  css  js  c++  java
  • Storm集群部署

    搭建 Storm 集群的主要步骤
    1.  搭建一个 Zookeeper 集群
    2.  在 Nimbus 和所有工作机器(Supervisor)上安装 Storm 依赖的软件 
        Python-2.7.2
        JAVA 7
        ZeroMQ -2.1.7
        JZMQ
        unzip
    3.  配置 storm.yaml
    4.  使用 Storm 脚本启动 Nimbus,Supervisor 及 UI
     
     
    #布置 ZK 集群
    wget http://mirror.esocc.com/apache/zookeeper/zookeeper-3.4.5/zookeeper-3.4.5.tar.gz
    cp zookeeper-3.4.5.tar.gz /usr/local/
    cd /usr/local/
    tar -zxvf zookeeper-3.4.5.tar.gz 
    ln -s /usr/local/zookeeper-3.4.5/ /usr/local/zookeeper
    vim /etc/profile (设置 ZOOKEEPER_HOME 和 ZOOKEEPER_HOME/bin) 
    export ZOOKEEPER_HOME="/usr/local/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
     
    配置ZK集群:
        (1)配置 Zookeeper 路径下的 conf/zoo.cfg
          dataDir=/tmp/zookeeper  (即之前创建的文件夹,可以自定)
          dataLogDir=/var/log/zookeeper
          clientPort=2181
          server.1=10.15.144.71:2888:3888
          server.2=10.15.144.72:2888:3888
          server.3=10.15.144.73:2888:3888
        (2)在对应 IP 的节点上的/tmp/zookeeper 目录中,创建 myid 文件,该文件中只包涵一个数字(对应 1/2/3)。
        (3)进入 Zookeeper 的安装目录的 bin/目录,使用命令 zkServer.sh start 将 zookeeper 守护进程启动。
     
    #安装 Storm 依赖的软件
    1、安装 Python-2.6.6 或以上版本(系统默认自带的是2.4.3版本)
    先安装GCC 
    yum -y install gcc
     
    wget http://www.python.org/ftp/python/2.7.2/Python-2.7.2.tar.bz2(最好安装2.7.2)
    tar -jxvf Python-2.7.2.tar.bz2
    cd Python-2.7.2
    ./configure
    make
    make install
    make clean
    make distclean
     
    查看版本信息
    $python -V 
    $Python 2.4.3
    建立软连接,使系统默认的python指向python2.7.2
    正常情况下即使python2.7.2安装成功后,系统默认指向的python仍然是2.4.3版本,考虑到yum是基于python2.4.3才能正常工作,不敢轻易卸载。如何实现将系统默认的python指向到2.7.2版本呢?
    $mv /usr/bin/python /usr/bin/python2.4 
    $ln -s /usr/local/bin/python2.7 /usr/bin/python
     
    检验python指向是否成功
    $python -V
    $Python 2.7.2
    解决系统python软链接指向python2.7版本后,yum不能正常工作
    $vi /usr/bin/yum
    将文件头部的
    #!/usr/bin/python
    改成
    #!/usr/bin/python2.4
     
     
    2、安装 zeromq
    zeromq的安装,先安装各种所需的依赖包:
    $ yum install autoconf
    $ yum install automake
    $ yum install libtool
    $ yum install gcc
    $ yum install gcc-c++
    $ yum install make
    $ yum install libuuid-devel/uuid-dev
    $ yum install git
      
    Git的安装
    yum install
        However, when trying to install git this way, you'll encounter the following error on CentOS 5:
        yum install git
        Setting up Install Process
        Parsing package install arguments
        No package git available.
        Nothing to do
    First, download the rpmforge-release package:
           wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
    Next, verify and install the package:
           rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
           rpm -K rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
           rpm -i rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
    And now we should be able to install git:
           yum install git
     
    下载安装zeromq
    wget http://download.zeromq.org/zeromq-2.1.7.tar.gz (最好安装zeromq-2.1.7.tar.gz)
    tar -xzf zeromq-2.1.7.tar.gz
    cd zeromq-2.1.7
    ./configure
    make
    make install
    make clean
    make distclean
     
    这里要说一下在./configure中可能会遇到的问题:
    首先我遇到了:configure:error:in '/usr/local/download/zeromq-2.1.7':
    congifure:error:no acceptable C compiler found in $PATH
    See 'config.log' for more details
    这是因为没有安装C编译器。
    解决方法是:# 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了,如此这般,zeromq就安装好了,接下来我们安装jzmq
     
     
    3、安装 jzmq ( jzmq的安装貌似是依赖zeromq的,所以应该先装zeromq,再装jzmq)
    git clone https://github.com/nathanmarz/jzmq.git (git: command not found)
    cd jzmq
    ./autogen.sh
    ./configure
    make
    make install
    make clean
    make distclean
     
    操作中出现的问题:
    git clone https://github.com/nathanmarz/jzmq.git
    Cloning into 'jzmq'...
    error: SSL certificate problem, verify that the CA cert is OK. Details:
    error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed while accessing https://github.com/nathanmarz/jzmq.git/info/refs?service=git-upload-pack
    fatal: HTTP request failed
     
    解决方法:
    env GIT_SSL_NO_VERIFY=true git clone https://github.com/nathanmarz/jzmq.git
     
    4、安装unzip
      (1)如果使用RedHat系列Linux系统,执行以下命令安装unzip:
           apt-get install unzip
      (2)如果使用Debian系列Linux系统,执行以下命令安装unzip:
           yum install unzip
     
     
    #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/
     
    配置环境变量
    vim ~/.bashrc 
    export STORM_HOME=/usr/local/storm-0.8.1
    export PATH=$PATH:$STORM_HOME/bin
     
    自定义目录,配置文件中需要指明
    mkdir /tmp/storm     
     
    配置 Storm.yaml文件:(在修改配置文件前有一点需要强调,在每一项的开始时要加空格,冒号后也必须要加空格)
    vim storm.yaml
     storm.zookeeper.server:
      - "10.15.144.71"
      - "10.15.144.72"
      - "10.15.144.73"
     storm.local.dir: "/tmp/storm"
     nimbus.host: "10.15.107.213"
     storm.zookeeper.port: 2181
     storm.cluster.mode: "distributed"
     ui.port: 9090
     
    storm.zookeeper.servers: 配置storm集群使用的Zookeeper集群地址
    Storm.local.dir:         配置storm信息存储目录
    storm.zookeeper.port:    配置zookeeper使用的端口。注意,此下的端口需与zookeeper配置文件中的clientPort端口号保持一致
    nimbus.host:             配置storm集群Nimbus机器地址,各个Supervisor工作节点需要知道哪个机器是Nimbus,以便下载                              Topologies的jars、confs等文件
    storm.ui:                配置Storm可视化工具的端口。此项可不配置,如果不配置,则默认为8080端口。为避免8080端口已被                          占用的风险,故此处设置为9090
    java.library.path:       配置storm 所依赖的本地依赖(ZeroMQ 和 JZMQ)的加载地址,默认的                                                        是:/usr/local/lib:/opt/local/lib:/usr/lib,大多情况下是对的,所以你应该不用更改这个配置,除                          非你系统的库路径给默认配置不一样。
     
    supervisor.slots.ports:  配置工作机器的工作端口。supervisor.slots.ports 对于每一台工作机器,这个配置指定在这台工作                          机器上运行多少工作进程,每个进程使用一个独立端口来接收消息,这个配置同时也指定使用哪些端                            口。如果你在这里定义5个端口,storm 会在这个机器上最多分配5个工作进程。如果分配3个端口,那                          么最多分配3个进程。设置配置4个 worker 运行在端口6700、6701、6702、6703。
                             例如:supervisor.slots.ports:
                                     -  6700
                                     -  6701
                                     -  6702
                                     -  6703 
                             此项可以不配置,如果不配置则默认为以上四个端口
     
    Storm 的启动
      Nimbus:     在 Storm 主控节点上,即 nimbus 机器上的storm的bin目录下,执行 storm nimbus & 启动Nimbus 后台程序,                 并放到后台执行,
      Supervisor: 在 Storm 各个工作节点上,即 supervisor 机器上的storm的bin目录下,执行 storm supervisor & 启动                       Supervisor 后台程序,并放到后台执行,
        UI:         storm UI是一个可以查看storm运行状态的的一个网站,通过nohup storm ui &运行,访问地址:                              http://{nimbus.host}:8080/
     
    #向集群提供拓扑运行
    http://hantec.iteye.com/blog/1783754
    http://www.cnblogs.com/zeutrap/archive/2012/10/11/2720528.html
    http://javanlu.github.io/blog/2013/10/11/storm-deploy-tutorial/
     
    #终止一个topology:
    storm kill {stormname}
    其中{stormname}是提交topology给storm集群的时候指定的名字。storm不会马上终止topology。相反,它会先终止所有的spout,让它们不再发射任何新的tuple, storm会等Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS秒之后才杀掉所有的工作进程。这会给topology足够的时间来完成所有我们执行storm kill命令的时候还没完成的tuple。
     
    storm jar /root/storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar storm.starter.WordCountTopology wordcount
     
    Exception in thread "main" java.lang.RuntimeException: org.apache.thrift7.transport.TTransportException: java.net.ConnectException: Connection refused
    at backtype.storm.utils.NimbusClient.(NimbusClient.java:36)
    at backtype.storm.utils.NimbusClient.getConfiguredClient(NimbusClient.java:17)
    at backtype.storm.StormSubmitter.submitTopology(StormSubmitter.java:53)
    at storm.starter.WordCountTopology.main(WordCountTopology.java:77)
    Caused by: org.apache.thrift7.transport.TTransportException: java.net.ConnectException: Connection refused
    at org.apache.thrift7.transport.TSocket.open(TSocket.java:183)
    at org.apache.thrift7.transport.TFramedTransport.open(TFramedTransport.java:81)
    at backtype.storm.utils.NimbusClient.(NimbusClient.java:34)
    ... 3 more
    Caused by: java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:529)
    at org.apache.thrift7.transport.TSocket.open(TSocket.java:178)
    ... 5 more
     
    解决方法如下:
    [root@localhost opt]# vim /etc/sysconfig/network
    NETWORKING=yes
    NETWORKING_IPV6=yes
    HOSTNAME=storm213
    GATEWAY=10.15.107.254
     
    [root@localhost opt]# vim /etc/hosts
    # Do not remove the following line, or various programs
    # that require network functionality will fail.
    127.0.0.1               localhost
    ::1             localhost6.localdomain6 localhost6
    10.15.107.213           storm213
     
     
    其它参考资料
  • 相关阅读:
    CSS 备忘
    header操作cookie
    定时器传参数
    Display 和Visible 区别
    php 笔记
    概要设计要求
    iOS 之 UITextView
    iOS 按钮设置图片和事件
    iOS 设置控件圆角、文字、字体
    iOS 之 UIScrollView
  • 原文地址:https://www.cnblogs.com/huxinping8800/p/7083800.html
Copyright © 2011-2022 走看看