Storm集群中包含两类节点:主控节点(Master Node)和工作节点(Work Node)。其分别对应的角色如下:
· 主控节点(Master Node)上运行一个被称为Nimbus的后台程序,它负责在Storm集群内分发代码,分配任务给工作机器,并且负责监控集群运行状态。Nimbus的作用类似于Hadoop中JobTracker的角色。
· 每个工作节点(Work Node)上运行一个被称为Supervisor的后台程序。Supervisor负责监听从Nimbus分配给它执行的任务,据此启动或停止执行任务的工作进程。每一个工作进程执行一个Topology的子集;一个运行中的Topology由分布在不同工作节点上的多个工作进程组成。
Nimbus和Supervisor节点之间所有的协调工作是通过Zookeeper集群来实现的。此外,Nimbus和Supervisor进程都是快速失败(fail-fast)和无状态(stateless)的;Storm集群所有的状态要么在Zookeeper集群中,要么存储在本地磁盘上。这意味着你可以用kill -9来杀死Nimbus和Supervisor进程,它们在重启后可以继续工作。这个设计使得Storm集群拥有不可思议的稳定性。
这一章节将详细描述如何搭建一个Storm集群。下面是接下来需要依次完成的安装步骤:
· 搭建Zookeeper集群;
· 安装Storm依赖库;
· 下载并解压Storm发布版本;
· 修改storm.yaml配置文件;
· 启动Storm各个后台进程。
见前面章节文章(zookeeper集群部署)
接下来,需要在Nimbus和Supervisor机器上安装Storm的依赖库,具体如下:
Java 6 Python 2.6.6
以上依赖库的版本是经过Storm测试的,Storm并不能保证在其他版本的Java或Python库下可运行。
配置JAVA_HOME环境变量;
注:默认centos6.4中已经存在python2.6.6,可以使用python –v查看,我的机器默认已存在所以在此我就不安装了;
1. 下载Python2.6.6:
wget http://www.python.org/ftp/python/2.6.6/Python-2.6.6.tar.bz2
2. 编译安装Python2.6.6:
tar –jxvf Python-2.6.6.tar.bz2 cd Python-2.6.6 ./configure make makeinstall
3. 测试Python2.6.6:
$ python -V Python 2.6.6
下一步,需要在Nimbus和Supervisor机器上安装Storm发行版本。
1. 下载Storm发行版本
2. 解压到安装目录下:
tar –zvxf apache-storm-0.9.3.tar.gz –C /usr/local/program/storm
3.配置环境变量
vi /etc/profile export STORM_HOME=/usr/local/program/storm/ apache-storm-0.9.3 export PATH=$STORM_HOME/bin:$PATH
Storm发行版本解压目录下有一个conf/storm.yaml文件,用于配置Storm。默认配置在这里可以查看。conf/storm.yaml中的配置选项将覆盖defaults.yaml中的默认配置。以下配置选项是必须在conf/storm.yaml中进行配置的:
1) storm.zookeeper.servers: Storm集群使用的Zookeeper集群地址,其格式如下:
storm.zookeeper.servers: - "111.222.333.444" - "555.666.777.888" 我的配置为: storm.zookeeper.servers: - "m1" - "s1" - "s2"
如果Zookeeper集群使用的不是默认端口,那么还需要storm.zookeeper.port选项。
2) storm.local.dir: Nimbus和Supervisor进程用于存储少量状态,如jars、confs等的本地磁盘目录,需要提前创建该目录并给以足够的访问权限。然后在storm.yaml中配置该目录,如:
storm.local.dir: "/usr/local/program/storm/data" 注:需要首先创建data目录
3) nimbus.host: Storm集群Nimbus机器地址,各个Supervisor工作节点需要知道哪个机器是Nimbus,以便下载Topologies的jars、confs等文件,如:
nimbus.host: "111.222.333.444" 我的配置如下: nimbus.host: "m1"
4) supervisor.slots.ports: 对于每个Supervisor工作节点,需要配置该工作节点可以运行的worker数量。每个worker占用一个单独的端口用于接收消息,该配置选项即用于定义哪些端口是可被worker使用的。默认情况下,每个节点上可运行4个workers,分别在6700、6701、6702和6703端口,如:
supervisor.slots.ports: - 6700 - 6701 - 6702 - 6703
最后一步,启动Storm的所有后台进程。和Zookeeper一样,Storm也是快速失败(fail-fast)的系统,这样Storm才能在任意时刻被停止,并且当进程重启后被正确地恢复执行。这也是为什么Storm不在进程内保存状态的原因,即使Nimbus或Supervisors被重启,运行中的Topologies不会受到影响。
以下是启动Storm各个后台进程的方式:
注意事项:
至此,Storm集群已经部署、配置完毕,可以向集群提交拓扑运行了。
参考:
1. https://github.com/nathanmarz/storm/wiki/Tutorial
2. https://github.com/nathanmarz/storm/wiki/Setting-up-a-Storm-cluster
3.http://www.cnblogs.com/panfeng412/archive/2012/11/30/how-to-install-and-deploy-storm-cluster.html