Storm 进阶(集群)

一、Storm 集群的框架


Storm 集群遵循主/从(Master/Slave)结构,通过配置文件指定主节点(Nimbus)。

Storm 集群由一个主节点(Nimbus)和一个或者多个工作节点(Supervisor)组成。

除 Nimbus 和 Supervisor 之外,还需要一个 Zookeeper 实例(Zookeeper 实例可以由一个或者多个节点组成)。

Nimbus 和 Supervisor 都是 Storm 提供的后台守护节点,可以共同存在同一台机器上。


Nimbus 守护进程的工作方式:

1. Nimbus 守护进程的职责是管理、协调和监控集群上运行的 Topology。包括 Topology 的发布、任务的指派和任务处理失败时重新指派任务。

2. 将 Topology 发布到 Storm 集群,就是将 Topology 和配置信息打包成 jar 文件提交到 Nimbus 服务器上。

3. 当 Nimbus 接收到 jar 文件后,会将 jar 文件分发到足够数量的 Supervisor 上。

4. 当 Supervisor 接收到 jar 文件后,Nimbus 就会指派 Task(Bolt 和 Spout 实例)到每个 Supervisor 并且发送信号指示 Supervisor 生成足够的 Worker 来执行指派的 Task。

5. 同时,Nimbus 会记录所有 Supervisor 节点的状态和分配给它们的 Task。

6. 如果 Nimbus 发现某个 Supervisor 没有上报心跳或者已经不可到达了,它会将故障的 Supervisor 分配的 Task 重新分配到集群中的其他 Supervisor 节点。

7. 如果 Nimbus 在 Topology 运行时停止了,只要分配的 Supervisor 和 Worker 正常运行,那么 Topology 会继续处理数据。

8. 如果 Nimbus 已经停止的情况下 Supervisor 异常终止了,那么数据就会处理失败,因为没有 Nimbus 来重新指派这个终止的 Supervisor 的任务了。


Supervisor 守护进程的工作方式:

1. Supervisor 等待 Nimbus 分配任务,当任务分配后生成并监控 Worker 执行任务。

2. Supervisor 和 Worker 同时运行在不同的 JVM 进程上,如果有 Supervisor 生成的 Worker 因为错误异常退出或终止,Supervisor 会尝试重新生成新的 Worker 。


Zookeeper 在 Storm 下的工作方式:

1. 在 Storm 分布式环境下提供了集中式的信息维护管理服务,它是一种简单的、功能强大的分布式同步机制。

2. Nimbus 和 Supervisor 之间的通信主要是结合 Zookeeper 的状态变更通知和监控通知来处理的。

3. Storm 使用 Zookeeper 来协调一个集群中的状态信息,比如:

· 任务分配情况

· Worker 的状态

· Supervisor 之间的 Nimbus 的拓扑度量


DRPC 服务工作机制

Storm 应用中的一个常见的模式,期望 Storm 的并发性和分布式计算能力应用到 “请求-响应” 同步的请求范式中。

这样的范式和典型的 Topology 的高异步性、长时间运行的特点恰恰相反,Storm 具有事务处理的特性来实现这种应用场景。

为实现这个功能,Storm 将额外的服务 DRPC 以及 Spout 和 Bolt 整合在一起工作,提供了可扩展的分布式 RPC 能力。

DRPC 功能是可选的,当 Storm 集群中的应用有使用这个功能时,DRPC 服务节点才是必须的。


Storm UI

Storm 功能是可选的,非常有用。

基于 Web 的 GUI 来监控 Storm 集群,对正在运行的 Topology 有一定的管理功能。


二、Storm 技术栈


Java 和 Clojure

大部分是 Java 和 Clojure 开发的。Storm的主要接口都是通过 Java 语言指定的。

Java 还友好的兼容多种其他语言。

Storm 的组件(Spout 和 Bolt)实际上可以使用任何当前服务器支持的语言进行开发。

JVM 虚拟机支持的语言可以原生的执行,不支持的语言需要通过 JNI 和 Storm 的多语言协议来实现。


Python

所有 Storm 的后台程序和命令都使用一个可执行的 Python 文件来启动。

后台程序包括:Nimbus 和 Supervisor。

命令包括:所有的命令和发布管理命令。

原因:Storm 集群中所有服务器都安装了 Python 解析器,并且很多工作站也使用 Python 进行管理。


三、在 Linux 上安装 Storm


准备工作

虚拟机工具:VMware

Linux 系统:Center OS

Java 环境:JDK

Zookeeper 环境:单实例、伪集群、集群(详情见 Linux 安装 Zookeeper )

Storm 压缩文件


安装 Storm

1. 下载 Storm 压缩文件


2. 进入到准备安装 Storm 的目录

命令:cd /usr/local/


3. 使用 xftp 上传 Storm 压缩文件



4. 确认文件上传成功

命令:ll


5. 解压缩文件

命令:tar zxvf apache-storm-1.0.1.tar.gz


6. 确认解压缩成功

命令:ll


7. 修改文件名

命令:mv apache-storm-1.0.1 storm


8. 创建 storm 分组

命令:groupadd storm


8. 创建 stormu 用户,并添加到指定分组 storm

命令:useradd -r -g storm stormu


9. 为 Storm 分配分组和用户(避免 Storm 进程以默认或者 root 权限启动)

命令:chown -R stormu:storm storm


10. 建立软连接(方便更新版本)

命令:ln -s /usr/local/storm/bin/storm /usr/bin/storm


11. 配置环境变量

命令:vim /etc/profile


STORM_HOME=/usr/local/storm	#安装目录
PATH=.:$STORM_HOME/bin		#安装目录/bin
export STORM_HOME		#生效

12. 配置文件生效

命令:source /etc/profile


13. 必须配置 storm.yaml (当 Storm 的守护进程启动时加载)

命令:vim storm/conf/storm.yaml



 # 配置 Zookeeper 集群
 storm.zookeeper.servers:
     - "192.168.206.107"
     - "192.168.206.108"
     - "192.168.206.109"
 
 # Storm 集群中 Nimbus 节点
 nimbus.host: "192.168.206.151"

 # 控制 Supervisor 节点运行多少个 Worker 进程
 supervisor.slots.ports:
     - 6700
     - 6701
     - 6702
     - 6704
 
 # 存储 Nimbus 和 Supervisor 守护进程的一些短暂信息(如:jar包和 Worker 需要的配置文件)
 storm.local.dir : "/home/local/storm/data"



14. 创建存储 Nimbus 和 Supervisor 数据的文件夹

命令:mkdir storm/data


13. 启动 Storm UI

命令:storm ui &


14. 检查 8080 端口是否开启(使用另一台设备检查)

命令:telnet 192.168.206.151 8080



15. 开启 8080 端口

命令:firewall-cmd --zone=public --add-port=8080/tcp --permanent


16. 重启端口

命令:firewall-cmd --repoad


17. 重新检查 8080 端口是否开启(使用另一台设备)

命令:telnet 192.168.206.151 8080


18. 使用浏览器访问 Storm UI(可以访问,但是报错)

URL:http://192.168.206.151:8080


19. 启动 Supervisor 守护进程

命令:storm supervisor &



20. 启动 Nimbus 守护进程

命令:storm nimbus &



21. 再次访问 Storm UI

URL:192.168.206.151:8080






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值