标签:read 多个 除了 工作 信息 业务 性能 错误 集群
本章中主要介绍了 Storm 的部署过程以及相关的配置信息。通过本章内容,帮助读者从零开始搭建一个 Storm 集群。相关的过程和主要的配置选项是 Storm 的运维人员需要重点关注的,对部署和配置选项不感兴趣的读者,可以跳过本章。
在开始 Storm 之旅前,我们先看一下 Storm 部署和配置的相关信息,并提交一个 Topology,了解 Storm 的基本原理。Storm 的部署模式包括单机和集群环境,同时在向 Storm 环境中提交 Topology 时,可以提交为本地(LocalCluster)或集群模式。 Storm 上应用的第一编程语言是 Java,通过 Storm 的本地集群模式, Topology 可以在 Eclipse 中直接运行、调试,因此关于 Storm 的部署这里只涉及本地和集群模式。
在本地模式中, Storm 会在进程中模拟 Storm 集群的功能,编写的 Topology 代码无需提交可以直接在本地运行,这对于开发和测试 Topology,非常有好处。
要部署 Storm,需要要部署以下几个相关组件。
若部署 0.9 版本之前的 Storm,还需要安装 ZMQ 和 JZMQ(除非作为研究之用,否则不推荐)。 Storm 在 0.9 之前使用的消息传输机制是 ZMQ,从 0.9 开始引入 Nety(也还支持 ZMQ)。相比 ZMQ 的 C 实现,纯 Java 实现的 Netty 能够提供更好的性能和可管理性(ZMQ 不能通过 -Xmx 等对内存进行管理)。
在 Yahoo! 中运行着一个超过 250 个节点的 Storm 集群,雅虎改进了 Storm 对 Zookeeper 的依赖,使得 0.9.2 版本时一个 Zookeeper 集群已经能够支持 2000 个节点,而他们的目标是到 2015 年一个 Storm 集群支持超过 4000 个节点。
Storm 集群分为 Nimbus 节点和 Supervisor 节点。
Nimbus 节点 :用于提交应用 Topology、管理整个 Storm 节点(将 Topology 的 Task 分配给 Worker、监控各个 Supervisor 节点的状态进行负载均衡等)。 Nimbus节点上不能运行 Worker。
Supervisor 节点 :负责从 Zookeeper 上获取、启动并运行任务。
因此相对而言,我们认为 Nimbus 并不需要 Supervisor 节点那么高的配置,在我们的测试环境中, Nimbus 的硬件配置只有 Supervisor 节点的一半。 Storm UI 节点也不需要高配置可以和 Nimbus 节点在同一台机器上。
以下简要介绍一下 Storm 的部署
在我们編写本书时, Zookeeper 最新稳定版本已经是 3.4.6,鉴于我们的环境上运行的是 3.4.5 且该版本在生产环境中已经稳定运行较长时间,因此本书是基于 3.4.5 版本(在部署上 3.4.5 版本和 3.4.6 版本并没有任何的不同之处)。 Zookeeper 的部署可以参考 http://www.cnblogs.com/binarylei/p/8721129.html 。
从版本 3.4.0 开始, Zookeeper 提供了自动清理快照(snapshot)和事务日志的功能,需要 在zoo.cfg 配置文件中设置。
autopurge.purgeInterval=1
autopurge.snapRetainCount=3
值得注意的是, Zookeeper 推荐部署奇数台服务器(根据据 Zookeeper 的特性,2N+1 台的 Zookeeper 集群,当 N 个节点不能访问时,整个 ZooKeeper 仍然是可用的)。
在 Storm 官网上(http://storm.apache.org)可以获取到 Storm 的最新和最近几个版本。
在编写本书时, Storm 最新稳定版本已经是 0.9.3,鉴于在我们的环境中使用的是 Storm 0.9.0.1 版本且该版本经过一些参数调整后已经稳定运行,本节中使用的仍旧是 0.9.0.1。
Storm 可以下载编译好的版本并在下载完成后将其放入安装路径中。我们习惯于新建个路径用于安装所有流计算相关的组件(如 Flume、 Kafka、 Zookeeper、 Storm 等),例如:
# 将 Storm 安装文件移动到安装路径下
mv storm-0.9.0.1.tar.gz /home/storm/
# 解压安装包
tar zxvf storm-0.9.0.1.tar.gz
Storm 的配置文件为 storm-0.9.0.l/conf/storm.yaml。在运行 Storm 进程之前,需要对该配置文件进行基本配置。表 3-1 列出了 Storm 中部分比较重要的配置信息。
需要注意的是, Storm 的配置文件为 yaml 文件,配置项后面必须跟一个空格才能跟配置值。
除了 conf/storm.yaml 配置文件之外,还有两个需要注意的配置
(1) logback/cluster.xml 文件,其中可以配置 Storm 的日志级别矩阵信息等。
(2) 操作系统的配置(通过 u1imit -a 查看),其中有两项信息需要配置。
在 Storm 配置好了之后,可以启动 Storm 进程。
在 Storm Nimbus 节点上需要运行的进程为 Nimbus、UI 和 Log Viewer,在 Storm Supervosor 节点上需要运行的进程为 Supervisor 和 Log Viewer。
理论上, Storm 的相关进程启动后就可以进行提交 Topology 等操作了。唯一需要注意的是,以上启动 Storm 进程命令在 SSH 退出后也将导致 Storm 相关进程结束,因此我们需要使得 Storm 相关进程在后台运行。
由于 Storm 被设计成高容错,即当 Supervisor 进程因异常退出时,上面运行的 Worker 进程不受影响仍能正常工作作(虽然不能再启动新的 Worker 进程了),因此需需要给 Storm 编写一个守护进程,用于守护 Storm 的正常运行。
我们使用了 Storm 的守护进程 stormDaemon 实现了以下几个功能。
(1) 根据 /etc/sysconfig/network 中的主机名,每隔 5 秒守护 Storm 进程,当发现其不存在时启动对应的进程(作为 Nimbus 节点的主机,其 hostname 上会包含 Nimbus 的字符串,而作为 Supervisor 节点的主机,其 hostname 上会包含 Supervisor 的字符串)。
(2) 将该服务注册成 Linux 服务,使得 Linux 服务器重启后不需要人工干预即可正常启动 Storm 服务(通过 chkconfig--add)
(3) 当 Supervisor 节点因为某些原因启动不起来,需要重建 logs 目录以及 storm.local.dir 目录时,能够自动实现
(4) Storm 异常退出时,可以调用 sendmail 自动提醒 Storm 集群的 owner 对集群进行日常维护等
(5) 在 Nimbus 节点上运行 Nimbus 相关进程,在 Supervisor 节点上运行 Supervisor 进程
(6) 为方便系统的运维,该脚本既能仅仅单纯启停 Storm 进程,也能守护 Storm 进程;该脚本仅仅启停 Storm 的 Nimbus、 Supervisor、UI、 Log Viewer 进程,对已经在运行的 Worker 进程不做任何限制。
实现以上功能的守护进程的脚本可以参考 https://github.com/jeremychen/StormDeamon ,该脚本的运行如图 3-3 所示。
可以按照以下步骤部署该脚本。
(1) 将该脚本置于系统 init 目录下:/etc/init
(2) 增加一个 Linux 服务
chkconfig --add stormDaemon
(3) 检查该守护进程服务是否成功添加到系统启动项中。
chkconfig --list | grep stormDaemon
当 Storm 的一个节点部署并配置完成后,其他节点可以完全直接复制,完成后直接运行。由此也可以看出, Storm 扩容时将会是非常方便的。因此对于我们要创建一个具有 6 个节点的 Storm 集群而言,直接将以上已经配置好的安装文件远程复制过去即可。需要注意的是,JDK 环境变量需要设置好, storm.yaml 配置文件中配置的路径(storm.1ocal.dir、java.library.path 等)需要预先创建并具有对应的权限。其他节点的部署在此不再赘述。
Storm 提供了一个示例工程 storm-starter,以便用户更好地理解 Storm 的机制,更容易、快速地入门。该工程可以从 https://github.com/nathanmarz/storm-starter 获取。
在获得该示例代码后,通过 Maven 编译成 JAR 包,在 Nimbus 节点上提交应用即可在 Storm UI 上看到运行信息。
Storm UI 分成 Cluster Summary、 Topology Summary、 Supervisor Summary、 Nimbus Configuration 四个部分。
Nimbus Configuration :介绍了整个 Storm 集群的配置信息,由于所有的节点都采用了同样的配置,因此该配置信息实际上也是整个集群的配置,其中:
在整个 Storm 的部署及使用过程中,需要注意以下两点。
每天用心记录一点点。内容也许不重要,但习惯很重要!
本文来自 《Strom 技术内幕与大数据实践》 一书。
标签:read 多个 除了 工作 信息 业务 性能 错误 集群
原文地址:https://www.cnblogs.com/binarylei/p/8747925.html