Storm集群部署

故事扮演 提交于 2020-01-24 13:55:50
搭建 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
 
 
其它参考资料
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!