Storm

一、Storm 是什么

Storm 是一个分布式、实时计算框架,适用于处理无边界的流数据

​ 无边界就是指 Storm 可以无限制地接收流数据,分布式是指可以实时添加设备来增加运算能力。

二、Strom 架构

在这里插入图片描述

Nimbus:Nimbus 是运行在 master node 上的进程,它负责任务分配以及监控任务。

Supervisor:Supervisor 是运行在 worker node 上的进程,它负责监听 Nimbus 下发的任务并且启动和停止任务(Storm 中一个任务就是一个 topology ,类似于 Hadoop 中的任务 Map Reduce Job),一个 Superviosr 可能只执行一个 topology 中的一部分。

Zookeeper:Nimbus 和 Supervisor 通过 Zookeeper 来进行合作。而且,Nimbus 和 Superviosr 不会保存运行状态,Zookeeper 把它们的状态存到了磁盘中,如果它们挂掉了,那么可以通过 Zookeeper 来快速恢复。

Topology:拓扑是一个计算图,节点但代表一些独立的计算,边代表节点之间数据的传递。

三、Strom 编程模型

在这里插入图片描述
Tuple:Tuple 是拓扑中节点传输数据的形式,它本身是一个有序的数值序列,其中每个数值都会被赋予一个命名。注:虽然元组中的每一个值都被命名,但这并不意味着一个元组是一个键值对列表。以为如果一个元组是键值对列表,那将意味着键名有合适元组的一部分,但实际上,元组只是数值列表,并没存键名,Storm 通过一种机制来为数值赋值命名

Stream:在拓扑中,一个流是拓扑中两个节点间一个无边界的元组序列,拓扑中可以有任意数量的流,除了拓扑中的第一个节点是从数据源读取数据外,其它节点可以接收多个流作为输入。

Spout:一个 Spout 是拓扑的流数据源头,Spout 通常会从外部数据源读取数据并且向拓扑中发射元组,它可以监听包括消息队列、数据库或其他数据输入源。

Bolt:Bolt 可以从输入流接收元组,对元组进行操作,以及可能会发生新的元组形成输出流。

四、并行度

4.1 基础概念

worker process:worker process 是 JVM 进程,一个节点中可以有一个或多个 worker process,它负责处理拓扑的部分或全部。

Executor:Executor 是 worker process 中的线程,它负责具体细节的处理,一个 executor 只能执行 topo 中的一个 spout 或一个 bolt。executor 的个数可以在 topology 运行中动态改变。

tasks:task 是 Storm 中最小粒度的单位,一个 executor 中可以有多个 task,每一个 task 是 spout 或 bolt 的实例。

4.2 设置并行度

​ 集群中运行拓扑的并行度与上述三者都有关系:

在这里插入图片描述

五、Stream 分组

​ 考虑一个问题,一个 executor 负责一个 spout 或 bolt 的执行,而一个 executor 中可能有多个 task,每一个 task 就是一个 spout 或者 一个 bolt 的实例,那么当 bolt 接收数据流的时候,应该是哪一个 task 来接受呢?这就涉及到了分组的问题,Storm 提供了不同的分组策略。

5.1 shuffle 分组(随机分组)

​ 随机分组把 tuple 随机地分发到 task,每个 task 得到的同样数量的 task,适合于每个 task 都做同样事情的情形,例如:在 wordCount 中把字符串拆分。

5.2 Field 分组(按照字段分组)

​ 按照字段分组,把某个字段的 tuple 都流入到一个 task 中,适合于 task 做特定事情的情形,例如:在 wordCount 对 word 进行计数,每个 task 负责不同 word 的计数。

​ **注意:在 Field 分组中,只能保证具有相同字段的 tuple 流向同一个 task,而不能保证一个 task 只接受一个字段的 tuple,因为在进行字段分组的时候是根据字段的 hash 值来分的,公式:hash(fields) % (no. of tasks),例如:task = 2,字段为 X,取值可能为 A 或 B,那么分组的时候就是根据 hash(A) % 2和 hash(B) % 2来分的,如果 hash(A) = hash(B) ,那么这两个字段就被分到了一个 task 中。

5.3 ALL 分组

​ tuple 被复制到 Bolt 的所有 task 中。

5.4 global 分组

​ 全部流都分配到 bolt 的同一个 task,id 最小的 task中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值