一、大数据实时计算框架
1、什么是实时计算?流式计算?
(一)什么是Storm?
Storm为分布式实时计算提供了一组通用原语,可被用于“流处理”之中,实时处理消息并更新数据库。这是管理队列及工作者集群的另一种方式。 Storm也可被用于“连续计算”(continuous computation),对数据流做连续查询,在计算时就将结果以流的形式输出给用户。它还可被用于“分布式RPC”,以并行的方式运行昂贵的运算。 Storm可以方便地在一个计算机集群中编写与扩展复杂的实时计算,Storm用于实时处理,就好比 Hadoop 用于批处理。Storm保证每个消息都会得到处理,而且它很快——在一个小集群中,每秒可以处理数以百万计的消息。更棒的是你可以使用任意编程语言来做开发。
举例:自来水厂处理自来水
2、对比:离线计算和流式计算
① 离线计算
离线计算:批量获取数据、批量传输数据、周期性批量计算数据、数据展示
代表技术:Sqoop批量导入数据、HDFS批量存储数据、MapReduce批量计算、Hive
② 流式计算
流式计算:数据实时产生、数据实时传输、数据实时计算、实时展示
代表技术:Flume实时获取数据、Kafka/metaq实时数据存储、Storm/JStorm实时数据计算、Redis实时结果缓存、持久化存储(mysql)。
一句话总结:将源源不断产生的数据实时收集并实时计算,尽可能快的得到计算结果
① Storm与Hadoop的区别
Storm用于实时计算 | Hadoop用于离线计算 |
Storm处理的数据保存在内存中,源源不断 | Hadoop处理的数据保存在文件系统中,一批一批 |
Storm的数据通过网络传输进来 | Hadoop的数据保存在磁盘中 |
Storm与Hadoop的编程模型相似 |
(*)离线计算:MapReduce和Spark Core, 数据的批量处理(Sqoop-->HDFS-->MR(SparkCore)--->HDFS)
(*)流式计算:Storm和Spark Streaming, 数据的实时性 (Flume-->Kafka-->Storm(SparkStreaming)-->Redis )
3、常见的实时计算系统
Apache Storm | http://storm.apache.org/ | |
Spark Streaming | http://spark.apache.org/streaming/ | |
阿里巴巴JStorm | http://www.jstorm.io/ | Alibaba JStorm is an enterprise fast and stable streaming process engine. |
Apache Flink | http://flink.apache.org/ | 第三代大数据处理引擎,既可以进行离线计算,也可以进行流式计算 |
二、Apache Storm体系结构
- Nimbus:负责资源分配和任务调度。
- Supervisor:负责接受nimbus分配的任务,启动和停止属于自己管理的worker进程。通过配置文件设置当前supervisor上启动多少个worker。
- Worker:运行具体处理组件逻辑的进程。Worker运行的任务类型只有两种,一种是Spout任务,一种是Bolt任务。
- Executor:Storm 0.8之后,Executor为Worker进程中的具体的物理线程,同一个Spout/Bolt的Task可能会共享一个物理线程,一个Executor中只能运行隶属于同一个Spout/Bolt的Task。
- Task:worker中每一个spout/bolt的线程称为一个task. 在storm0.8之后,task不再与物理线程对应,不同spout/bolt的task可能会共享一个物理线程,该线程称为executor。
Storm也是主从结构,存在单点故障问题 ----> 实现HA(借助ZooKeeper)
Storm的运行机制
- 整个处理流程的组织协调不用用户去关心,用户只需要去定义每一个步骤中的具体业务处理逻辑
- 具体执行任务的角色是Worker,Worker执行任务时具体的行为则有我们定义的业务逻辑决定
三、安装和配置Apache Storm_伪分布模式
-
1-bigdata111安装Strom并设置环境变量
[前提]:安装ZooKeeper并且启动zkServer.sh start
- 下载storm包并传到~/tools目录:
apache-storm-1.0.3.tar.gz
- 进入~/tools目录,解压安装: #tar -zxvf apache-storm-1.0.3.tar.gz -C ~/training/
- 设置storm环境变量:#vi ~/.bash_profile
添加如下信息:
## ZK 3.4.10 ##确保ZK已经安装
ZOOKEEPER_HOME=/root/training/zookeeper-3.4.10
export ZOOKEEPER_HOME
PATH=$ZOOKEEPER_HOME/bin:$PATH
export PATH
## Storm ###
STORM_HOME=/root/training/apache-storm-1.0.3
export STORM_HOME
PATH=$STORM_HOME/bin:$PATH
export PATH
4.环境变量生效:#source ~/.bash_profile
-
2-配置Storm的伪分布模式_1台机器
bigdata111编辑配置文件:vim /root/training/apache-storm-1.0.3/conf/storm.yaml [注意:_ 和:配置信息和后面的信息中间有一个空格,如果没有配置会出错,切记]
storm.zookeeper.servers:
- "bigdata111"
nimbus.seeds: ["bigdata111"]
storm.local.dir: "/root/training/apache-storm-1.0.3/tmp"
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
-
3.启动主从节点和UI
在bigdata111上启动命令:
启动主节点 | #storm nimbus & |
启动从节点 | #storm supervisor & |
启动UI | #storm ui & |
WED访问地址 | http://ip:8080 |
WEB信息如下:可以看到只有1个主节点(nimbus),1个从节点(supervisor),4个worker(slots)
四、安装和配置Apache Storm_全分布模式(3台机器)
简单的全分布模式至少需要3台机器,1主2从。这里使用bigdata112,bigdata113,bigdata114作为【主从从】环境。
1.前提:3台机器zookeeper集群环境配置完毕并启动【参考文章:zookeeper配置部分】
下面是实际环境:leader:bigdata114,follower:bigdata112,bigdata113.
2.在bigdata112,bigdata113,bigdata114全部机器上面安装storm并配置环境变量。
- 下载storm包并传到~/tools目录:
apache-storm-1.0.3.tar.gz
- 进入~/tools目录,解压安装: #tar -zxvf apache-storm-1.0.3.tar.gz -C ~/training/
- 设置storm环境变量:#vi ~/.bash_profile
添加如下信息:
## Storm ###
STORM_HOME=/root/training/apache-storm-1.0.3
export STORM_HOME
PATH=$STORM_HOME/bin:$PATH
export PATH
- 环境变量生效:#source ~/.bash_profile
3.bigdata112主节点配置并复制到从节点bigdata113,bigdata114
- 编辑bigdata112的storm配置文件:vim /root/training/apache-storm-1.0.3/conf/storm.yaml [注意:_ 和:配置信息和后面的信息中间有一个空格,如果没有配置会出错,切记]
storm.zookeeper.servers:
- "bigdata112"
- "bigdata113"
- "bigdata114"
nimbus.seeds: ["bigdata112"]
storm.local.dir: "/root/training/apache-storm-1.0.3/tmp"
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
- 将配置好的storm复制到其他节点
#scp -r apache-storm-1.0.3/ root@bigdata113:/root/training/
#scp -r apache-storm-1.0.3/ root@bigdata114:/root/training/
- 启动主从节点
bigdata112主节点开启 | #storm nimbus & #storm ui & |
bigdata113从节点开启 | #storm supervisor & |
bigdata114从节点开启 | #storm supervisor & |
- 访问主节点的WEB信息:http://192.168.205.112:8080
五、安装和配置Apache Storm_HA
HA的环境基于上面的集群配置,将bigdata113作为bigdata112的备份主节点。因此HA的实际环境信息:
主节点 | bigdata112 |
主节点_备份 | bigdata113 |
从节点1 | bigdata113 |
从节点2 | bigdata114 |
0.关闭集群环境进程
HA环境是基于集群环境的配置,在配置HA之前,将集群环境的进程全部关闭。查看主从节点的进程,关闭如下进程:
主节点关闭:nimbus
从节点关闭:supervisor
1.编辑bigdata112主节点的配置文件:vim /root/training/apache-storm-1.0.3/conf/storm.yaml
增加一个主节点:nimbus.seeds: ["bigdata112", "bigdata113"]
启用Event Logger 可以查看处理的数据:"topology.eventlogger.executors": 1
2.复制主节点配置到从节点bigdata113,bigdata114
将配置好的storm复制到其他节点
#scp -r apache-storm-1.0.3/ root@bigdata113:/root/training/
#scp -r apache-storm-1.0.3/ root@bigdata114:/root/training/
启动主从节点
bigdata112主节点开启 | #storm nimbus & #storm ui & #storm logviewer & |
bigdata113主节点开启 | #storm nimbus & #storm ui & #storm logviewer & |
bigdata113从节点开启 | #storm supervisor & |
bigdata114从节点开启 | #storm supervisor & #storm logviewer & |
启动后主从节点的进程信息如下:
bigdata112_4进程:nimbus,core,QuorumPeerMain(zookeeper进程),logviewer
bigdata113_5进程:nimbus,supervisor,core,QuorumPeerMain(zookeeper进程),logviewer
bigdata114_3进程:supervisor,QuorumPeerMain(zookeeper进程),logviewer
3.查看主节点的WEB
主节点bigdata112 WEB: http://bigdata112:8080
主节点bigdata113 WEB: http://bigdata113:8080
4.演示HA功能:关闭bigdata112主节点的nimbus进程,查看bigdata113是否成为主节点:
》查看bigdata112 WEB此时显示2个主节点,一个是leader,一个是not a leader。
》查看bigdata112的进程并关闭nimbus进程:
》再次查看WEB页面:此时bigdata切换成主节点
》再次启动bigdata112的nimbus进程,查看WEB:bigdata113任然为leader,bigdata112此时not a leader。
六、Apache Storm_HA Demo演示Wordcount计数器
1.bigdata112主节点storm自带例子查看
Storm自带了很多的例子可供我们进行实时计算演示,Example位置:/root/training/apache-storm-1.0.3/examples/storm-starter/storm-starter-topologies-1.0.3.jar。
bigdata112:
查看例子中的readme介绍用法:cat README.markdown
2.运行jar
运行:storm jar ***.jar 任务Topology的类 别名
#storm jar storm-starter-topologies-1.0.3.jar org.apache.storm.starter.WordCountTopology MyWCTopology
3.WEB查看topology任务
任务在没有人为打断的情况下会一直运行,此时查看主节点的WEB,显示的任务信息:参考storm的体系架构:worker=slots,一个worker可以包含多个executors,executors是单线程的,所以executors=tasks.
4.查看topology任务的组成
》点击主节点页面的topology任务名称,进入任务的详细页面:
》topology任务详细页面:
5.查看spout和bolts任务的内容
》在topology任务详情页,开启Debug功能,然后查看spout和bolts任务的详情
》开启debug模式并设置采样率之后,查看具体的spout和bolts任务采样详情页:
》点击采样的任务为spout,页面跳转到新页面,点击events按钮:
》关闭topology任务
七、查看zookeeper中保存的HA任务信息
使用zookeeper查看器,连接bigdata112,查看保存的storm的HA任务信息(HA任务信息比较多):
八、Storm内部通信的机制:有Work中的Executor来执行