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.29.86 | JDK1.7、zookeeper-3.4.6、apache-storm-1.0.0 |
| log1 | CentOS 7.0 | 114.55.29.241 | JDK1.7、zookeeper-3.4.6、apache-storm-1.0.0 |
| log3 | CentOS 7.0 | 114.55.253.15 | JDK1.7、zookeeper-3.4.6、apache-storm-1.0.0 |
2. 安装Zookeeper集群
参见之前的文章《Zookeeper介绍及安装部署》。
3. 安装Storm集群
log1、log2和log3部署storm集群,log1作为Nimbus节点,log2和log3作为surpervisor节点。
(1)下载安装软件并解压
[root@log1 local]# wget http://apache.fayea.com/storm/apache-storm-1.0.0/apache-storm-1.0.0.tar.gz
[root@log1 local]# tar zxf apache-storm-1.0..tar.gz
(2)配置storm
[root@log1 ~]# cd /usr/local/apache-storm-1.0./
[root@log1 apache-storm-1.0.]# vim conf/storm.yaml
- 配置Zookeeper地址(配置Zookeeper的主机名,注意: 如果Zookeeper集群使用的不是默认端口,那么还需要配置storm.zookeeper.port)

- storm.local.dir: The Nimbus and Supervisor daemons require a directory on the local disk to store small amounts of state (like jars, confs, and things like that). 在配置文件里添加一行:
storm.local.dir: "/usr/local/apache-storm-1.0.0/status"

这个status目录在storm启动的时候会自动创建,当然也可以提前创建好。
- 配置nimbus.seeds:用于配置主控节点的地址,可以配置多个。

- 配置supervisor.slots.ports
supervisor.slots.ports:
-
-
-
-

配置工作节点上的进程端口。你配置一个端口,意味着工作节点上启动一个worker,在实际的生产环境中,我们需要根据实际的物理配置以及每个节点上的负载情况来配置这个端口的数量。在这里每个节点我象征性的配置4个端口。
注意:以上配置,凡是有冒号的地方,冒号后都要有个空格。
log2和log3主机也是同样的配置。拷贝这台机器的storm包到log2和log3主机:
[root@log1 local]# scp -pr apache-storm-1.0. root@114.55.29.241:/usr/local/
[root@log1 local]# scp -pr apache-storm-1.0. root@114.55.253.15:/usr/local/
- 对于两台supervisor node,我们额外开启JMX支持,在配置文件中加入如下配置:
supervisor.childopts: -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=

9998就是用于通过JMX收集supervisior JVM指标的端口。
(3)配置storm环境变量
[root@log1 apache-storm-0.10.]# vim /etc/profile
export STORM_HOME=/usr/local/apache-storm-0.10.
export PATH=$STORM_HOME/bin:$PATH
[root@log1 apache-storm-0.10.]# source /etc/profile
五、启动storm ui、Nimbus和Supervisor
log1节点启动nimbus和storm ui:
[root@log1 ~]# nohup storm ui >/dev/null >& &
[root@log1 ~]# nohup storm nimbus >/dev/null >& &
log2和log3主机启动Supervisor节点:
[root@log2 ~]# nohup storm supervisor >/dev/null >& &
[root@log3 ~]# nohup storm supervisor >/dev/null >& &
访问ui页面: http://114.55.29.86:8080/

界面简单介绍:
- Used slots:使用的worker数。
- Free slots:空闲的worker数。
- Executors:每个worker的物理线程数。
Storm介绍及安装部署的更多相关文章
- Kafka介绍及安装部署
本节内容: 消息中间件 消息中间件特点 消息中间件的传递模型 Kafka介绍 安装部署Kafka集群 安装Yahoo kafka manager kafka-manager添加kafka cluste ...
- Apache Solr 初级教程(介绍、安装部署、Java接口、中文分词)
Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...
- hue框架介绍和安装部署
大家好,我是来自内蒙古的小哥,我现在在北京学习大数据,我想把学到的东西分享给大家,想和大家一起学习 hue框架介绍和安装部署 hue全称:HUE=Hadoop User Experience 他是cl ...
- Storm入门教程 第三章Storm集群安装部署步骤、storm开发环境
一. Storm集群组件 Storm集群中包含两类节点:主控节点(Master Node)和工作节点(Work Node).其分别对应的角色如下: 主控节点(Master Node)上运行一个被称为N ...
- Spark介绍及安装部署
一.Spark介绍 1.1 Apache Spark Apache Spark是一个围绕速度.易用性和复杂分析构建的大数据处理框架(没有数据存储).最初在2009年由加州大学伯克利分校的AMPLab开 ...
- Zookeeper介绍及安装部署
本节内容: Zookeeper介绍 Zookeeper特点 Zookeeper应用场景 用到了Zookeeper的一些系统 Zookeeper集群安装部署 一.Zookeeper介绍 是一个针对大型分 ...
- Storm集群安装部署步骤【详细版】
作者: 大圆那些事 | 文章可以转载,请以超链接形式标明文章原始出处和作者信息 网址: http://www.cnblogs.com/panfeng412/archive/2012/11/30/how ...
- Hadoop入门进阶课程13--Chukwa介绍与安装部署
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博主为石山园,博客地址为 http://www.cnblogs.com/shishanyuan ...
- Storm集群安装部署步骤
本文以Twitter Storm官方Wiki为基础,详细描述如何快速搭建一个Storm集群,其中,项目实践中遇到的问题及经验总结,在相应章节以"注意事项"的形式给出. 1. Sto ...
随机推荐
- 面试题(一GC)
参考https://blog.csdn.net/m0_38110132/article/details/74542143 6.详谈一下Java内存模型以及GC算法: (1). jvm结构 JVM的内部 ...
- VMware Workstation 12 Pro安装CentOs图文教程(超级详细)
本文记录了VMware Workstation 12 Pro安装CentOs的整个过程,具体如下: VMware Workstation 12: CENTOS 6.4 : 创建虚拟机 1.首先安装好V ...
- 【XSY3139】预言家 数位DP NFA
题目描述 有一个定义在 \(\{0,1,2,3,4,5,6,7,8,9\}\) 上的合规表达式,包含三种基本的操作: 结合:\(E_1E_2\) 分配:\((E_1|E_2|\ldots|E_n),n ...
- STM32的IO口是如何配置为某个外设使用的 ---?
@2019-03-01 [猜想] 使用片内外设功能: 首先将对应 IO 口配置为复用输出 其次是 IO 口对应的多个功能外设,哪个外设使能即将外设与 IO 口相连 [疑问] 若多个外设都使能,那么到底 ...
- C++中使用vector.erase()需要注意的事项
本人菜鸟一枚.. 今天在用vector.erase()的时候,发现总是不能把应该erase掉的东西erase干净. 举个栗子: vector<int> num_vec; num_vec.p ...
- python之路day03--数据类型分析,转换,索引切片,str常用操作方法
数据类型整体分析 int :用于计算bool:True False 用户判断str:少量数据的存储 list:列表 储存大量数据 上亿数据[1,2,3,'zzy',[aa]] 元组:只读列表(1,23 ...
- Notepad++ 的函数参数提示错误的问题终于解决了
看第3张图片,明明我输入的是 print_double(), 提示的却是 print() 函数的参数. 这个问题困扰了我半年,今天晚上找到解决问题的办法:
- TensorFlow深度学习,一篇文章就够了
http://blog.jobbole.com/105602/ 作者: 陈迪豪,就职小米科技,深度学习工程师,TensorFlow代码提交者. TensorFlow深度学习框架 Google不仅是大数 ...
- 关于FlexBox的布局
关于FlexBox的布局 基本要素 因为FlexBox是一整个模块并不是一个单独的属性,它涉及到很多东西包括它的所有设置属性.一些属性是需要被设置在容器(父级元素,称为『弹性容器』),而一些其他的属性 ...
- Quartz.net 3.x使用总结(一)——入门介绍
1.Quartz.net简介 Quartz.NET是一个强大.开源.轻量级的任务调度框架.任务调度在我们的开发中经常遇到,如说:每天晚上三点让程序或网站执行某些代码,或者每隔5秒种执行一个方法等.Wi ...