流式计算之Storm概念以及架构详解

一、什么是Storm?

Storm为分布式实时计算提供了一组通用原语,可被用于“流处理”之中,实时处理消息并更新数据库。这是管理队列及工作者集群的另一种方式。 Storm也可被用于“连续计算”(continuous computation),对数据流做连续查询,在计算时就将结果以流的形式输出给用户。它还可被用于“分布式RPC”,以并行的方式运行昂贵的运算。

Storm可以方便地在一个计算机集群中编写与扩展复杂的实时计算,Storm用于实时处理,就好比 Hadoop 用于批处理。Storm保证每个消息都会得到处理,而且它很快——在一个小集群中,每秒可以处理数以百万计的消息。更棒的是你可以使用任意编程语言来做开发。

二、离线计算和流式计算

2.1 离线计算

离线计算:批量获取数据、批量传输数据、周期性批量计算数据、数据展示

代表技术:Sqoop批量导入数据、HDFS批量存储数据、MapReduce批量计算、Hive

2.2 流式计算

流式计算:数据实时产生、数据实时传输、数据实时计算、实时展示

代表技术:Flume实时获取数据、Kafka/metaq实时数据存储、Storm/JStorm实时数据计算、Redis实时结果缓存、持久化存储(mysql)。

一句话总结:将源源不断产生的数据实时收集并实时计算,尽可能快的得到计算结果

在这里插入图片描述

2.3 Storm与Hadoop的区别

不同点:

Storm用于实时计算Hadoop用于离线计算
Storm处理的数据保存在内存中,源源不断Hadoop处理的数据保存在文件系统中,一批一批
Storm的数据通过网络传输进来Hadoop的数据保存在磁盘中

相同点:

Storm与Hadoop的编程模型相似

三、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的运行机制

在这里插入图片描述
(1)整个处理流程的组织协调不用用户去关心,用户只需要去定义每一个步骤中的具体业务处理逻辑

(2)具体执行任务的角色是Worker,Worker执行任务时具体的行为则有我们定义的业务逻辑决定

在这里插入图片描述

五、Storm的安装配置

(1)解压:

tar -zxvf apache-storm-1.0.3.tar.gz -C ~/training/

(2)设置环境变量:
在这里插入图片描述
(3)编辑配置文件:

[root@bigdata111 apache-storm-1.0.3]$ vi /conf/storm.yaml

在这里插入图片描述

注意:如果要搭建Storm的HA,只需要在nimbus.seeds中设置多个nimbus即可

(4)把安装包复制到其他节点上即可。

六、启动和查看Storm

(1)在nimbus.host所属的机器上启动 nimbus服务和logviewer服务

storm nimbus &
storm logviewer &

(2)在nimbus.host所属的机器上启动ui服务

storm ui &

(3)在其它个点击上启动supervisor服务和logviewer服务

storm supervisor &
storm logviewer &

(4)查看storm集群:访问 http://bigdata111:8080,即可看到storm的ui界面
在这里插入图片描述

七、Storm的常用命令

有许多简单且有用的命令可以用来管理拓扑,它们可以提交、杀死、禁用、再平衡拓扑。

(1)提交任务命令格式:storm jar 【jar路径】 【拓扑包名.拓扑类名】 【拓扑名称】

storm jar storm-starter-topologies-1.0.3.jar org.apache.storm.starter.WordCountTopology MyWordCount1

(2)杀死任务命令格式:storm kill 【拓扑名称】 -w 10

(执行kill命令时可以通过-w [等待秒数]指定拓扑停用以后的等待时间)

storm kill topology-name -w 10

(3)停用任务命令格式:storm deactivte 【拓扑名称】

storm deactivte topology-name

(4)启用任务命令格式:storm activate【拓扑名称】

storm activate topology-name

(5)重新部署任务命令格式:storm rebalance 【拓扑名称】

storm rebalance topology-name

再平衡使你重分配集群任务。这是个很强大的命令。比如,你向一个运行中的集群增加了节点。再平衡命令将会停用拓扑,然后在相应超时时间之后重分配工人,并重启拓扑。

八、Demo演示:WordCount及流程分析

通过查看Storm UI上每个组件的events链接,可以查看Storm的每个组件(spout、blot)发送的消息。但Storm的event logger的功能默认是禁用的,需要在配置文件中设置:topology.eventlogger.executors: 1,具体说明如下:

"topology.eventlogger.executors": 0 	//默认,禁用
"topology.eventlogger.executors": 1 	//一个topology分配一个Event Logger.
"topology.eventlogger.executors": nil 	//每个worker.分配一个Event Logge

在这里插入图片描述
WordCount的数据流程分析:
在这里插入图片描述

九、Storm的编程模型

在这里插入图片描述
(1)Topology:Storm中运行的一个实时应用程序的名称。(拓扑)

(2)Spout:在一个topology中获取源数据流的组件。

通常情况下spout会从外部数据源中读取数据,然后转换为topology内部的源数据。

(3)Bolt:接受数据然后执行处理的组件,用户可以在其中执行自己想要的操作。

(4)Tuple:一次消息传递的基本单元,理解为一组消息就是一个Tuple。

(5)Stream:表示数据的流向。

(6)StreamGroup:数据分组策略

Shuffle Grouping :随机分组,尽量均匀分布到下游Bolt中
Fields Grouping :按字段分组,按数据中field值进行分组;相同field值的Tuple被发送到相同的Task
All grouping :广播
Global grouping :全局分组,Tuple被分配到一个Bolt中的一个Task,实现事务性的Topology。
None grouping :不分组
Direct grouping :直接分组 指定分组

十、Storm编程案例:WordCount

流式计算一般架构图:
在这里插入图片描述
Flume:用来获取数据

Kafka:用来临时保存数据

Strom:用来计算数据

Redis:是个内存数据库,用来保存结果数据

(1)创建Spout(WordCountSpout)组件采集数据,作为整个Topology的数据源
在这里插入图片描述
(2)创建Bolt(WordCountSplitBolt)组件进行分词操作
在这里插入图片描述
(3)创建Bolt(WordCountBoltCount)组件进行单词计数操作
在这里插入图片描述
(4)创建主程序Topology(WordCountTopology),并提交到本地运行
在这里插入图片描述
(5)也可以将主程序Topology(WordCountTopology)提交到Storm集群运行
在这里插入图片描述

十一、Storm集群在ZK上保存的数据结构

在这里插入图片描述

十二、Storm集群任务提交流程

在这里插入图片描述

十三、Storm内部通信机制

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Storm是一个分布式实时计算系统,它可以在一个集群中运行多个计算节点,实时处理数据流。下面是Storm集群的工作流程以及运行时的原理: 1. 架构概述 Storm的集群架构包括以下几个主要的组件: - Nimbus:是Storm集群的主节点,负责协调和管理整个集群的运行。它负责分配任务、监控任务的执行情况、调度和负载均衡等工作。 - Supervisor:是Storm集群的工作节点,负责实际执行计算任务。每个Supervisor节点都会运行一个或多个工作进程(Worker),每个Worker执行一个或多个计算任务(Topology)。 - ZooKeeper:是一个分布式协调系统,用于协调Storm集群中各个组件之间的通信和协作。 - Topology:是Storm集群中的一个计算任务,由多个Spout和Bolt组成,用于实时处理数据流。Topology可以在Storm集群中部署和运行,由Nimbus节点分配到各个Supervisor节点上执行。 2. 工作流程 Storm集群的工作流程如下: - 开发Topology:首先需要开发一个Topology,包括定义Spout和Bolt的计算逻辑、数据流的处理方式等。 - 提交Topology:将Topology提交到Nimbus节点,由Nimbus节点负责分配任务到各个Supervisor节点上执行。 - 分配任务:Nimbus节点根据集群资源情况和负载均衡策略,将Topology的各个组件分配到不同的Supervisor节点上执行。 - 执行任务:Supervisor节点接收到任务后,启动对应的Worker进程,执行Topology的计算任务。 - 数据处理:Spout和Bolt组件接收输入数据,并按照定义好的处理方式进行数据转换、过滤、聚合等操作。 - 数据传输:Spout和Bolt之间通过数据流进行数据传输。数据流是Storm的核心概念,它用于实时传输数据,可以在Spout和Bolt之间建立任意的连接关系。 - 拓扑调度:Nimbus节点会监控集群中各个组件的运行情况,根据需要进行拓扑调度,例如动态调整任务分配、调整数据流连接方式等。 - 容错处理:Storm集群具有较强的容错性,可以在节点失效、网络故障等情况下自动进行容错处理,确保数据处理的正确性和可靠性。 3. 运行时原理 Storm集群的运行时原理主要包括以下几个方面: - 数据流传输:Storm集群中的数据流是基于Tuple的,每个Tuple包含一个或多个字段,可以表示任意类型的数据。Spout和Bolt之间通过数据流传输Tuple,实现数据的实时处理和传输。 - 执行模型:Storm采用的是多线程模型,每个Worker进程会启动多个线程,用于处理数据流和计算任务。Spout和Bolt之间采用异步方式传递数据,可以充分利用多线程处理数据。 - 容错处理:Storm集群具有较强的容错性,可以在节点失效、网络故障等情况下自动进行容错处理。例如,当一个节点出现故障时,Nimbus节点会将该节点上的任务重新分配到其他节点上执行,确保数据处理的正确性和可靠性。 - 负载均衡:Storm集群采用的是负载均衡策略,可以根据集群资源情况和任务负载情况,动态调整任务分配和数据流传输,实现集群资源的充分利用和任务的高效执行。 总的来说,Storm集群的架构和工作流程比较复杂,但是它提供了一种高效、可靠、实时的数据处理方案,可以应用于各种实时数据分析和处理场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值