参考: https://www.cnblogs.com/zhaojiankai/p/7257617.html
Storm介绍及安装部署
本节内容:
- Apache Storm是什么
- Apache Storm核心概念
- Storm原理架构
- Storm集群安装部署
- 启动storm ui、Nimbus和Supervisor
一、Apache Storm是什么
Apache Storm是自由开源的分布式实时计算系统,擅长处理海量数据,适用于数据实时处理而非批处理。
批处理使用的大多是鼎鼎大名的hadoop或者hive,作为一个批处理系统,hadoop以其吞吐量大、自动容错等优点,在海量数据处理上得到了广泛的使用。但是,hadoop不擅长实时计算,因为它天然就是为批处理而生的,这也是业界一致的共识。否则最近几年也不会有s4,storm,puma这些实时计算系统如雨后春笋般冒出来啦。
举个搜索场景中的例子,当一个卖家发布了一条宝贝信息时,他希望的当然是这个宝贝马上就可以被卖家搜索出来、点击、购买啦,相反,如果这个宝贝要等到第二天或者更久才可以被搜出来,估计就会有不少损失了。 再举一个推荐的例子,如果用户昨天在淘宝上买了一双袜子,今天想买一副泳镜去游泳,但是却发现系统在不遗余力地给他推荐袜子、鞋子,根本对他今天寻找泳镜的行为视而不见,这样商家的利益就有所损失。这是因为后台系统做的是每天一次的全量处理,而且大多是在夜深人静之时做的,那么客户今天白天做的事情要到明天才能反映出来。这也就是为什么需要实时处理的原因。
二、Apache Storm核心概念
- Nimbus:Storm集群主节点,负责资源分配和任务调度。我们提交任务和截止任务都是在Nimbus上操作的。一个Storm集群只有一个Nimbus节点。
- Supervisor:Storm集群工作节点,接受Nimbus分配任务,管理所有Worker。
- Worker:工作进程,每个工作进程中都有多个Task。
- Task:任务,每个Spout和Bolt都是一个任务,每个任务都是一个线程。
- Topology:计算拓扑,包含了应用程序的逻辑。
- Stream:消息流,关键抽象,是没有边界的Tuple序列。
- Spout:消息流的源头,Topology的消息生产者。
- Bolt:消息处理单元,可以过滤、聚合、查询数据库。
- Stream grouping:消息分发策略,一共6种,定义每个Bolt接受何种输入。
- Reliability:可靠性,Storm保证每个Tuple都会被处理。
三、Storm原理架构
1. Storm集群架构图
Zookeeper集群在Storm集群中的作用:
Zookeeper集群负责Nimbus节点和Supervior节点之间的通信,监控各个节点之间的状态。比如通常我们提交任务的时候是在Nimbus节点上执行的,Nimbus节点通过zk集群将任务分发下去,而Supervisor是真正执行任务的地方。Nimbus节点通过zk集群监控各个Supervisor节点的状态,当某个Supervisor节点出现故障的时候,Nimbus节点就会通过zk集群将那个Supervisor节点上的任务重新分发,在其他Supervisor节点上执行。这就意味着Storm集群也是高可用集群,如果Nimbus节点出现故障的时候,整个任务并不会停止,但是任务的管理会出现影响,通常这种情况下我们只需要将Nimbus节点恢复就可以了。Nimbus节点不支持高可用,这也是Storm目前面临的问题之一。不过一般情况下,Nimbus节点的压力不大,通常不会出现问题。
一般情况下,Zookeeper集群的压力并不大,一般只需要部署3台就够了。Zookeeper集群在Storm集群中逻辑上是独立的,但在实际部署的时候,一般会将zk节点部署在Nimbus节点或Supervisor节点上。
2. 数据处理流程图
storm处理数据的特点:数据源源不断,不断处理。
3. 拓扑图分析
storm中是没有数据存储结构的,我们需要自己设计数据落地接口,指明数据存储到哪一部分中。Storm本身是不存储数据的。
四、Storm集群安装部署
1. 环境信息
主机名 | 操作系统版本 | IP地址 | 节点角色 | 安装软件 |
log1 | CentOS 7.0 | 114.55.24.111 | Nimbus | JDK1.7、zookeeper-3.4.6、apache-storm-1.0.0 |
log1 | CentOS 7.0 | 114.55.24.112 | surpervisor | JDK1.7、zookeeper-3.4.6、apache-storm-1.0.0 |
log3 | CentOS 7.0 | 114.55.24.113 | surpervisor | JDK1.7、zookeeper-3.4.6、apache-storm-1.0.0 |
2. 正式开始安装Storm集群(安装storm之前保证机器上安装了jdk和zookeeper)
(1)在log1机器上下载安装软件并解压(也可以通过官网下载了之后上传到想要安装的机器目录下)
[root@stormfat024111 local]# wget http://apache.fayea.com/storm/apache-storm-1.0.0/apache-storm-1.0.0.tar.gz
[root@stormfat024111 local]# tar zxf apache-storm-1.0.0.tar.gz
(2)创建storm软连接
[root@stormfat024111 local]# ln -s /usr/local/apache-storm-1.2.2/ /usr/local/storm
(2)在storm的conf目录下的storm.yaml文件中添加以下配置
storm.zookeeper.servers:
- "114.55.24.111"
- "114.55.24.112"
- "114.55.24.113"
nimbus.seeds: ["114.55.24.111"]
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
storm.local.dir: "/usr/local/storm"
参数说明:
storm.zookeeper.servers: 配置Zookeeper地址(配置Zookeeper的主机名,注意: 如果Zookeeper集群使用的不是默认端口,那么还需要配置storm.zookeeper.port)
nimbus.seeds:用于配置主控节点的地址,可以配置多个。
supervisor.slots.ports:配置工作节点上的进程端口。你配置一个端口,意味着工作节点上启动一个worker,在实际的生产环境中,我们需要根据实际的物理配置以及每个节点上的负载情况来配置这个端口的数量。(备注:端口数量=storm ui上的单台机器的Slots数量)
storm.local.dir: Nimbus和Supervisor守护进程需要本地磁盘上的一个目录来存储少量的状态。简单的讲就是:storm使用的本地文件系统目录(必须存在并且storm进程可读写)。
注意:配置文件中,凡是有冒号的地方,冒号后都要有个空格。
(3)至此,log1即nimbus机器上的storm已经安装好了。由于log2和log3主机也是同样的配置,所以将log1机器的上storm包拷贝到log2和log3主机即可:
[root@stormfat024111 local]# scp -pr apache-storm-1.2.2 root@114.55.24.112:/usr/local/
[root@stormfat024111 local]# scp -pr apache-storm-1.2.2 root@114.55.24.113:/usr/local/
由于在log1上建立了软连接,为了保持统一,在log2和log3上也要去建立软连接。
(3)如果没有配置环境变量请配置storm环境变量
[root@log1 apache-storm-0.10.0]# vim /etc/profile
export STORM_HOME=/usr/local/apache-storm-0.10.0
export PATH=$STORM_HOME/bin:$PATH
[root@log1 apache-storm-0.10.0]# source /etc/profile
五、启动storm ui、Nimbus和Supervisor
log1节点启动nimbus和storm ui:
[root@log1 ~]# nohup storm ui >/dev/null 2>&1 &
[root@log1 ~]# nohup storm nimbus >/dev/null 2>&1 &
log2和log3主机启动Supervisor节点:
[root@log2 ~]# nohup storm supervisor >/dev/null 2>&1 &
[root@log3 ~]# nohup storm supervisor >/dev/null 2>&1 &
访问ui页面: http://114.55.29.86:8080/
界面简单介绍:
- Used slots:使用的worker数。
- Free slots:空闲的worker数。
- Executors:每个worker的物理线程数。