Apache Storm学习笔记一:创建Storm集群

来源:互联网 发布:c语言源小程序代码大全 编辑:程序博客网 时间:2024/05/19 22:26

这学习笔记系列采用的是storm1.1.1版本。参照官方文档:http://storm.apache.org/releases/1.1.1/

  • 1创建zookeeper集群
  • 2在nimbus和worker机器上安装依赖
  • 3下载storm发布到nimbus和worker的机器上
  • 4配置stormyaml
  • 5通过storm脚本运行守护进程

1、创建zookeeper集群

Storm使用zookeeper来协调集群。zookeeper没有用来做消息传递,所以storm在zookeeper的负载很低。单个节点的zookeeper集群在大多数情况下就足够,但是如果你想要故障切换或者正在部署一个比较大的storm集群你就需要一个大的zookeeper集群。

关于zookeeper部署需要注意:
1). zookeeper必须在监控模式下运行。因为zookeeper是个快读失败的系统,如果遇到了故障,zookeeper会主动关闭。
2). 需要设置一个cron服务来定时压缩zookeeper的数据与事务日志。因为zookeeper的后台进程不会处理这个问题,如果不配置cron,zookeeper的日志会很快将磁盘填满。

2、在nimbus和worker机器上安装依赖

接下来你需要在nimbus和worker机器上安装storm的依赖.如下:
1). JAVA 7+ (Apache Storm1.x在java7 和java8都测试通过了)
2). Python2.6.6(Python 3.x也可以工作,但不作为CI环境的一部分进行测试)

以上均为在 Storm 上测试通过的版本。Storm 并不保证对其他版本的 Java 或 Python 的支持。

3、下载storm发布到nimbus和worker的机器上

下载storm的发行版然后在nimbus和每一台worker的机器上解压。storm的发行本也可以从这里下载

4、配置storm.yaml

storm的发行版中包含一个conf/storm.yaml的文件,用来配置storm的各种属性。文件的默认配置看这里。storm.yaml会覆盖defaults.yaml中各个配置项的默认值。以下几个参数是安装集群的时候必须配置的:

1)storm.zookeeper.servers:这个是storm关联的zookeeper集群的地址列表,此项配置入下所示:

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

注意:如果你使用的zookeeper集群的端口不是默认端口(2181),你还需要配置storm.zookeeper.port。

2)storm.local.dir:nimbus和supervisor后台进程都需要一个用于存放一些状态数据(比如jar包、配置文件等等)的目录。你应该在每一台机器上都创建该目录,赋予权限,并将该目录写入配置文件中,如下所示:

storm.local.dir: "/mnt/storm"

如果你在windows上运行storm,如下:

storm.local.dir: "C:\\storm-local"

如果你使用一个相对路径,它相对于你安装storm的目录(STORM_HOME)。你可以空着,它将取默认值$STORM_HOME/storm-local

3)nimbus.seeds:集群中的工作节点需要知道集群中的哪台机器是主机,以便从主机上下载拓扑jars和配置文件。如下:

nimbus.seeds: ["111.222.333.44"]

鼓励你填写所有机器列表的FQDN。如果你想创建nimbus H/A,你必须列出运行nimbus的所有机器得FQDN。如果你只是想创建一个为分布式集群,你可以保持默认,但是还是鼓励你填写FQDN。

在这里科普一下FQDN:
FQDN是完全合格域名/全程域名缩写,Fully Qualified Domain Name,即是域名,访问时将由DNS进行解析,得到IP。
FQDN = Hostname + DomainName

4)supervisor.slots.ports:你可以通过这个配置项来配置每个工作节点机器上能够运行的几个worker。每个worker都需要一个单独的端口类接受消息,这个配置项就定义了worker可以使用的端口列表。如果你在这里定义了5个端口,那么storm就会在该机器上分配最多5个worker。如果定义3个端口,那么最多只会运行3个worker。此项的默认值是6700、6701、6702、6703四个端口,如下所示:

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

监控supervisor的健康
storm提供了一种机制能够让管理员配置supervisor运行管理员提供的脚本周期性的判断一个节点是不是健康。管理员可以通过执行位于storm.health.check.dir的脚本来判断节点是不是健康状态。如果脚本检测节点处理不健康状态,则它必须打印一行以Error开头的文本作为标准输出。supervisor将周期性的运行在storm.health.check.dir的脚本并且检查输出。如果脚本的书本包含ERROR字符串,如上所述,supervisor将停止所有的worker并且退出。

如果supervisor在监控下执行“/bin/storm node-health-check”就能够判断supervisor是否被运行,或者这个节点是不是不健康。

健康检查目录配置如下:

storm.health.check.dir: "healthchecks"

脚本必须具有执行的权限,脚本如果是由于执行超时导致的,超时时间可以配置如下:、

storm.health.check.timeout.ms: 5000

配置外部库和环境变量(可选)
如果你需要使用某些外部库或者定制插件的功能,你可以将相关 jar 包放入 extlib/ 与 extlib-daemon 目录下。注意,extlib-daemon 目录仅仅用于存储后台进程(Nimbus,Supervisor,DRPC,UI,Logviewer)所需的 jar 包,例如,HDFS 以及定制的调度库。另外,可以使用STORM_EXT_CLASSPATH 和 STORM_EXT_CLASSPATH_DAEMON 两个环境变量来配置普通外部库与“仅用于后台进程”外部库的 classpath。

5、通过storm脚本运行守护进程

最后一步就是运行所有的storm守护进程。需要注意的是每个守护进程都应该在监控下运行。storm是一个快速失败的系统,其进程很容易在遇到错误而终止。之所以设计成这种模式,是为了确保storm进程在任何时候都能够安全地停止并且在进程重新启动之后能够正确的恢复。这也是storm不在处理过程中保存任何状态的原因,在这种情况下,如果有nimbus或者supervisor重新启动,运行中的拓扑不会受到任何影响。下面是启动守护进程的方法:
1)Nimbus:在master机器上,在监控下执行命令“bin/storm nimbus”
2)Supervisor:在每一台工作节点的机器上,在监控下执行命令“bin/storm supervisor”。supervisor守护进程负责启动/停止该机器上的worker进程
3)UI:在master机器上,在监控下执行“bin/storm ui”命令启动Storm UI(可以在浏览器中方便的监控集群与拓扑运行状况的站点)。可以通过http://{nimbus.host}:8080来访问UI站点。

启动后台进程非常简单。同时,守护进程的日志将记录到logs/目录中。

原创粉丝点击