storm集群相关资料

1. Storm集群组件

Storm集群中包含两类节点:主控节点(Master Node)和工作节点(Work Node)。其分别对应的角色如下:

  • 主控节点(Master Node)上运行一个被称为Nimbus的后台程序,它负责在Storm集群内分发代码,分配任务给工作机器,并且负责监控集群运行状态和监测故障。Nimbus的作用类似于Hadoop中JobTracker的角色。
  • 每个工作节点(Work Node)上运行一个被称为Supervisor的后台程序。Supervisor负责监听从Nimbus分配给它执行的任务,据此启动或停止执行任务的工作进程。每一个工作进程执行一个Topology的子集;一个运行中的Topology由分布在不同工作节点上的多个工作进程组成。

                                                          

                                                                                     Storm集群组件

Nimbus和Supervisor节点之间所有的协调工作是通过Zookeeper集群来实现的。此外,Nimbus和Supervisor进程都是快速失败(fail-fast)和无状态(stateless)的;Storm集群所有的状态要么在Zookeeper集群中,要么存储在本地磁盘上。这意味着你可以用kill -9来杀死Nimbus和Supervisor进程,它们在重启后可以继续工作。这个设计使得Storm集群拥有不可思议的稳定性。

Storm 的容错分为如下几种类型。
(1)工作进程worker 失效:如果一个节点的工作进程worker“死掉”,supervisor 进程会尝试重启该worker。如果连续重启worker 失败或者worker 不能定期向Nimbus 报告“心跳”,Nimbus 会分配该任务到集群其他的节点上执行。
(2)集群节点失效:如果集群中某个节点失效,分配给该节点的所有任务会因超时而失败,Nimbus 会将分配给该节点的所有任务重新分配给集群中的其他节点。
(3)Nimbus 或者supervisor 守护进程失败:Nimbus 和supervisor 都被设计成快速失败(遇到未知错误时迅速自我失败)和无状态的(所有的状态信息都保存在Zookeeper 上或者是磁盘上)。Nimbus 和supervisor 守护进程必须在一些监控工具(例如,daemontools 或者monitor)的辅助下运行,一旦Nimbus 或者supervisor 失败,可以立刻重启它们,整个集群就好像什么事情也没发生。最重要的是,没有工作进程worker 会因为Nimbus 或supervisor 的失败而受到影响,Storm 的这个特性和Hadoop 形成了鲜明的对比,如果JobTracker 失效,所有的任务都会失败。
(4)Nimbus 所在的节点失效:如果Nimbus 守护进程驻留的节点失败,工作节点上的工作进程worker 会继续执行计算任务,而且,如果worker 进程失败,supervisor 进程会在该节点上重启失败的worker 任务。但是,没有Nimbus的影响时,所有worker 任务不会分配到其他的工作节点机器上,即使该worker所在的机器失效。

2. 安装Storm集群

下面是接下来需要依次完成的安装步骤:

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

2.1 搭建Zookeeper集群本博客中已有 (在此不再介绍

注意事项:

  1. 由于Zookeeper是快速失败(fail-fast)的,且遇到任何错误情况,进程均会退出,因此,最好能通过监控程序将Zookeeper管理起来,保证Zookeeper退出后能被自动重启。
  2. Zookeeper运行过程中会在dataDir目录下生成很多日志和快照文件,而Zookeeper运行进程并不负责定期清理合并这些文件,导致占用大量磁盘空间,因此,需要通过cron等方式定期清除没用的日志和快照文件。

2.2 安装Storm依赖库

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

前期准备:

yum install -y e2fsprogs-devel pkgconfig git autoconf automake unzip libtool

2.2.1 安装ZeroMQ 2.1.7:

wget http://download.zeromq.org/zeromq-2.1.7.tar.gz
tar -xzf zeromq-2.1.7.tar.gz
cd zeromq-2.1.7
./configure
make
make install

  

2.2.2 安装JZMQ:

为了保证JZMQ正常工作,可能需要完成以下配置:

  1. 正确设置 JAVA_HOME环境变量
  2. 安装Java开发包
git clone https://github.com/nathanmarz/jzmq.git
cd jzmq
./autogen.sh ./configure make make install

检查zeroMQ和jzmq的安装:

查看zeromq和jzmq的库是否已经安装到位,一般在/usr/local/lib目录:

ls -l /usr/local/lib

2.2.3 安装Java 6

2.2.4 安装Python2.6.6

2.3 下载并解压Storm发布版本  (这里使用Storm0.8.2)

2.4 修改storm.yaml配置文件  (严格按模板规则填写,每行顶头,前面不允许留有空格,并且“-”列上下必须对齐!!!)

1) storm.zookeeper.servers: Storm集群使用的Zookeeper集群地址,其格式如下:

storm.zookeeper.servers:
  - "111.222.333.444"
  - "555.666.777.888"

如果Zookeeper集群使用的不是默认端口,那么还需要storm.zookeeper.port选项

2) storm.local.dir: Nimbus和Supervisor进程用于存储少量状态,如jars、confs等的本地磁盘目录,需要提前创建该目录并给以足够的访问权限。然后在storm.yaml中配置该目录,如:

storm.local.dir: "/home/admin/storm/workdir"

3) nimbus.host: Storm集群Nimbus机器地址,各个Supervisor工作节点需要知道哪个机器是Nimbus,以便下载Topologies的jars、confs等文件,如:

nimbus.host: "111.222.333.444"

4) supervisor.slots.ports: 对于每个Supervisor工作节点,需要配置该工作节点可以运行的worker数量。每个worker占用一个单独的端口用于接收消息,该配置选项即用于定义哪些端口是可被worker使用的。默认情况下,每个节点上可运行4个workers,分别在6700、6701、6702和6703端口,如:

supervisor.slots.ports:
    - 6700
    - 6701
    - 6702
    - 6703

5)定义DRPC服务器位置:

 drpc.servers:
     - "172.16.65.25"

 需要启动drpc服务时的命令:bin/storm drpc &       (端口可以不用配置,默认是:3772)

2.5 启动Storm各个后台进程

最后一步,启动Storm的所有后台进程。和Zookeeper一样,Storm也是快速失败(fail-fast)的系统,这样Storm才能在任意时刻被停止,并且当进程重启后被正确地恢复执行。这也是为什么Storm不在进程内保存状态的原因,即使Nimbus或Supervisors被重启,运行中的Topologies不会受到影响。

以下是启动Storm各个后台进程的方式:

  1. Nimbus: 在Storm主控节点上运行"bin/storm nimbus >/dev/null 2>&1 & "启动Nimbus后台程序,并放到后台执行;    默认端口:6627
  2. UI: 在Storm主控节点上运行"bin/storm ui >/dev/null 2>&1 & "启动UI后台程序,并放到后台执行;                             开户端口:8080
  3. 拷贝storm文件夹到其他机器后启动Supervisor,运行"bin/storm supervisor >/dev/null 2>&1 & "启动Supervisor后台程序,并放到后台执行;

启动后可以通过http://{nimbus host}:8080观察集群的worker资源使用情况、Topologies的运行状态等信息。

注意事项:

  1. Storm后台进程被启动后,将在Storm安装部署目录下的logs/子目录下生成各个进程的日志文件。
  2. 经测试,Storm UI必须和Storm Nimbus部署在同一台机器上,否则UI无法正常工作,因为UI进程会检查本机是否存在Nimbus链接。
  3. 为了方便使用,可以将bin/storm加入到系统环境变量中。

至此,Storm集群已经部署、配置完毕,可以向集群提交拓扑运行了。

查看当前storm任务列表:storm list

3. 向集群提交任务

1)启动Storm Topology:

storm jar allmycode.jar org.me.MyTopology arg1 arg2 arg3

其中,allmycode.jar是包含Topology实现代码的jar包,org.me.MyTopology的main方法是Topology的入口,arg1、arg2和arg3为org.me.MyTopology执行时需要传入的参数。

2)停止Storm Topology:

storm kill {toponame}

其中,{toponame}为Topology提交到Storm集群时指定的Topology任务名称。

原文地址:https://www.cnblogs.com/wjoyxt/p/4333194.html