贫农的大数据之三(Storm集群部署)

论坛 期权论坛 脚本     
匿名技术用户   2021-1-3 05:20   16   0

Storm集群部署


部署环境

虚拟机4台,CPU:4核,内存:6G,硬盘:50G。
1台用于nimbus及web ui:192.168.0.64
3台用于supervisor:192.168.0.41,192.168.0.42,192.168.0.65
系统均为Centos 6.3

软件版本

SUN JDK 1.6
Python 2.6.6
Zookeeper 3.4.5 ,这里我使用了3个节点的集群分别为:zookeeper-1,zookeeper-2,zookeeper-3
Storm 0.8.2

安装过程

  1. 修改各自的hostname,例如
    <pre code_snippet_id="319147" snippet_file_name="blog_20140429_1_8531222" name="code" class="plain" style="color: rgb(51, 51, 51); font-size: 14px; line-height: 20px;">#修改HOSTNAME
    vim /etc/sysconfig/networkHOSTNAME=supervisor-4#同时修改hostname让其立即生效hostname supervisor-4
    
    
    
    
    
    
    
    
  2. 配置各个服务器的/etc/hosts 类似下面。注意127.0.0.1在对应各自的域名
    127.0.0.1 nimbus
    192.168.0.64 nimbus
    192.168.0.65 supervisor-1
    192.168.0.41 supervisor-2
    192.168.0.42 supervisor-3
  3. 安装zeromq
    wget http://download.zeromq.org/zeromq-2.1.7.tar.gz
    tar zxvf zeromq-2.1.7.tar.gz 
    cd zeromq-2.1.7
    ./configure
    make
    make install

    在configure过程中出现如下错误

    checking for uuid_generate in -luuid… no
    configure: error: cannot link with -luuid, install uuid-dev.
    安装缺少的依赖
    yum install uuid*  e2fsprogs* libuuid* -y


  4. 安装jzmq
    git clone git://github.com/nathanmarz/jzmq.git
    cd jzmq
    ./autogen.sh
    ./configure
    make
    make install
    在configure过程中出现如下错误
    configure: error: the JAVA_HOME environment variable must be set to your JDK location.
    解决办法是设置JAVA_HOME环境变量

  5. 安装storm
    wget https://github.com/nathanmarz/storm/archive/0.8.2.zip
    unzip storm-0.8.2.zip

  6. 配置storm
    在配置时一定注意在每一项的开始时要加空格,冒号后也必须要加空格,否则storm就不认识这个配置文件了。
    修改conf/storm.yaml文件:
     storm.local.dir: "/var/storm"
     storm.zookeeper.servers:
         - "zookeeper-1"
         - "zookeeper-2"
         - "zookeeper-3"
    
     nimbus.host: "nimbus"
    
    #最大worker数量及对应端口,这个需要根据实际业务特点配置
     supervisor.slots.ports:
         - 6700
         - 6701
         - 6702
         - 6703
    
    #避免中文乱码
     worker.childopts: "-Xmx768m -Dsun.jnu.encoding=UTF-8 -Dfile.encoding=UTF-8"


  7. 安装daemontools
    因为Storm的各个组件都是快速失败,需要使用daemontools来保证服务的可靠性
    sudo wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
    sudo tar zxvf daemontools-0.76.tar.gz
    
    #当前版本需要打补丁,google就会找到
    sudo wget http://www.qmail.org/moni.csi.hu/pub/glibc-2.3.1/daemontools-0.76.errno.patch
    cd admin/daemontools-0.76/
    sudo patch -p1 < ../../daemontools-0.76.errno.patch
    
    sudo ./package/install
    
    #输出最后如下:
    Creating /service…
    Adding svscanboot to inittab…
    init should start svscan now.
    #安装完成

  8. 配置daemontools
    在nimbus节点配置nimbus的daemontools
    mkdir /service/storm
    touch /service/storm/run
    chmod 755 /service/storm/run
    vi /service/storm/run
    在该文件中输入如下内容
    #!/bin/sh
    exec 2>&1
    exec /opt/storm-0.8.2/bin/storm nimbus
    在nimbus节点配置ui的daemontools
    mkdir /service/stormui
    touch /service/stormui/run
    chmod 755 /service/stormui/run
    vi /service/stormui/run
    在该文件中输入如下内容
    #!/bin/sh
    exec 2>&1
    exec /opt/storm-0.8.2/bin/storm ui
    在每个supervisor节点配置daemontools
    mkdir /service/storm
    touch /service/storm/run
    chmod 755 /service/storm/run
    vi /service/storm/run
    在文件中输入如下内容
    #!/bin/sh
    exec 2>&1
    exec /opt/storm-0.8.2/bin/storm supervisor

  9. 使用daemontools
    启动nimbus或supervisor
    nohup supervise /service/storm/ &
    启动ui
    nohup supervise /service/storm/ &
    通过ps命令可以看到对应的进程已经启动
    [root@nimbus ~]# ps -ef|grep storm
    root      1018  1013  0  2013 ?        00:00:01 supervise stormui
    root      1019  1013  0  2013 ?        00:00:02 supervise storm
    在kill -9后进程会被自动重启


    停止daemontools命令
    #停止daemontools的supervise命令
    svc -d /service/storm/   
    #停止后的重新启动
    svc -u /service/storm/


  10. 设置开机启动daemontools
    touch /etc/init/svscan.conf
    vi /etc/init/svscan.conf
    
    #添加如下内容
    
    start on runlevel [345]
    respawn
    exec /command/svscanboot
    
    #编辑完成,保存文件
    initctl reload-configuration
    initctl start svscan
    通过ps命令可以看到svscanboot运行成功
    [root@nimbus ~]# ps -ef|grep svscan
    root      1003     1  0  2013 ?        00:00:00 /bin/sh /command/svscanboot
    root      1013  1003  0  2013 ?        00:06:19 svscan /service

    另一种可能的办法(在笔者的环境中没有配置成功,供其他人参考)
    将以下内容放入到/etc/rc.local最后
    csh -cf '/command/svscanboot &'


  11. 关于Storm web ui
    当启动Storm的web ui之后,并且端口没有更改时,可以通过如下地址访问
    http://{NIMBUS_HOST}:8080
    ui上会显示当前集群状态,运行的Topology的状态等重要信息

  12. 组件配置更改
    当修改了ui、nimbus、supervisor的配置时,可以直接kill掉响应的组件,由daemontools为你自动重启,如果为了放心,可以在ui上先停掉所有的topology

  13. 日志的配置
    当前的storm版本使用log4j配置日志,配置文件在log4j/storm.log.properties。我当前的配置为
    log4j.rootLogger=INFO, A2
    
    
    log4j.appender.A1 = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.A1.File = ${storm.home}/logs/${logfile.name}
    log4j.appender.A1.Append = true
    log4j.appender.A1.DatePattern = '.'yyy-MM-dd
    log4j.appender.A1.layout = org.apache.log4j.PatternLayout
    log4j.appender.A1.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %c{1} [%p] %m%n
    
    log4j.appender.A2 = org.apache.log4j.RollingFileAppender
    log4j.appender.A2.Threshold = DEBUG 
    log4j.appender.A2.File = /letv/storm-logs/${logfile.name}
    log4j.appender.A2.Append = true    
    log4j.appender.A2.MaxFileSize = 500MB 
    log4j.appender.A2.MaxBackupIndex = 3  
    log4j.appender.A2.layout = org.apache.log4j.PatternLayout 
    log4j.appender.A2.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %c{1} [%p] %m%n


  14. 测试Storm集群
    下载storm-starter并编译打包,期间因“某种原因”访问不到的依赖就需要“特殊技巧”下载下来并放到maven私服中。
    在nimbus节点提交测试用topology
    bin/storm jar storm-starter-0.0.1-SNAPSHOT.jar storm.starter.WordCountTopology wordcount
    注意wordcount是topology名字,这个参数会使其运行在集群是,否则是本地模式

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP