千家信息网

Storm 环境部署及简单使用

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,===> 什么是 Storm?--> Twitter将Storm正式开源了,这是一个分布式的、容错的实时计算系统,遵循 Eclipse Public License 1.0。--> Storm是由Ba
千家信息网最后更新 2026年11月01日Storm 环境部署及简单使用

===> 什么是 Storm?

--> Twitter将Storm正式开源了,这是一个分布式的、容错的实时计算系统,遵循 Eclipse Public License 1.0。

--> Storm是由BackType开发的实时处理系统,BackType现在已在Twitter麾下。

--> Storm为分布式实时计算提供了一组通用原语,可被用于"流处理"之中,实时处理消息并更新数据库。

Storm也可被用于"连续计算"(continuous computation),对数据流做连续查询,在计算时就将结果以流的形式输出给用

户。它还可被用于"分布式RPC",以并行的方式运行昂贵的运算。

--> Storm的主工程师Nathan Marz表示:Storm可以方便地在一个计算机集群中编写与扩展复杂的实时计算,

Storm用于实时处理,就好比 Hadoop 用于批处理。

Storm保证每个消息都会得到处理,而且它很快--在一个小集群中,每秒可以处理数以百万计的消息。更棒的是你可以使用

任意编程语言来做开发

===> Storm 支持离线计算和流式计算

--> 离线计算:批量获取数据,批量传输数据,周期性比量计算数据,数据展示(Sqoop-->HDFS--> MR ---> HDFS)

--- 代表技术:

-- Sqoop 批量导入数据

-- HDFS 批量存储数据

-- MapReduce 批量计算

-- Hive

--> 流式计算:数据实时产生,数据实时传输,数据实时计算,实时展示(Flume ---> Kafka ---> 流式计算 ---> Redis)

--- 代表技术:

-- Flume 实时获取数据

-- Kafka/metaq 实时数据存储

-- Storm/JStorm 实时数据计算

-- Redis 实时结果缓存,持久化存储(MySQL)

===> Storm 与 Hadoop 的区别

-->

StormHadoop
用于实时计算用于离线计算
处理的数据保存在内存中,连连不断处理的数据保存在文件系统中
数据通过网络传输进来从 HDFS 平台获取数据


===> Storm 体系结构


===> Storm 运行流程

--> Storm 结构中各部分职责:

--- Nimbus:

负责资源分配和任务调度

--- Supervisor:

负责接受 Nimbus 分配的任务,启动和停止属于自己管理的 worker 进程

(*)可通过配置文件设置当前 supervisor 上启动几个 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


===> Strom 伪分布式安装部署

--> 安装前需要部署 Zookeeper 环境,参见:https://blog.51cto.com/songqinglong/2062909

--> 解压:

        tar zxf apache-storm-1.0.3.tar.gz -C /app


--> 配置环境变量

        vim  ~/.bash_profile        # storm_home        STORM_HOME=/app/apache-storm-1.0.3        export STORM_HOME        PATH=$STORM_HOME/bin:$PATH        export PATH


--> 修改配置文件

       vim $STORM_HOME/conf/storm.yaml          # 此处指定 zookeeper 节点                    storm.zookeeper.servers:                - "192.168.10.210"         #          # nimbus.seeds: ["host1", "host2", "host3"]         # 此处指定 nimbus 节点         nimbus.seeds: ["192.168.10.210"]         # 每个从节点上的worker个数         supervisor.slots:ports:            - 6700            - 6701            - 6702            - 6703         #          # 开启任务 Debug 功能         "topology.eventlogger.executors": 1         # 任务上传后,保存的目录         storm.local.dir: "/data/storm_data"


--> 启动Storm

--- 伪分部模式:

      storm nimbus &                  storm ui &      # 可以通过 http 的方式查看:http://ip:8080      storm supervisor &      storm logviewer &

--- 完全分部式:

-- 主节点

        storm nimbus &        storm ui &        storm logviewer &

-- 从节点

        storm supervisor            storm logviewer

--> 查看: http://ip:8080

===> Strom 完全分布式安装部署

--> 安装方式与伪分布式基本相同,只需要将安装目录copy 到其它节点上即可

===> Storm HA

--> 只需修改storm.yaml 文件中的 nimbus.seeds: ["bigdata1"] ,将主机加入到此列表中,并在主机上启动 nimbus 即可


===> Storm 常用命令

--> 提交任务

--- 格式:storm jar ***.jar [Toplogy名字:类名字] 别名

--- 示例:

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


--> 杀死任务

--- 格式:storm kill 任务名称 -w 10 注: -w 等待秒数

--- 示例:

      storm kill MyWordCountExample  -w  10

--> 停用任务

--- 格式:storm deactivte 任务名称

--- 示例:

      storm deactivte  MyWordCountExample

--- 格式:storm activate 任务名称

--- 示例:

      storm activate MyWordCountExample


--> 重新部署任务

--- 格式:storm rebalance 任务名称

--- 示例:

      storm rebalance MyWordCountExample

--- (*) 当集群有所变动,此命令将会信用拓扑,然后在相应的超时时间内重启拓扑,重新分配任务

===> Storm 中 WordCount 程序流程分析

--> 通过查看 Storm UI 上每个组件的events 链接,可以查看 Storm 的每个组件(spout/blot)发送的消息

--> 需要开启 Debug 功能,在配置文件中添加下列参数并重新启动 storm

            "topology.eventlogger.executors": 1


-->

===> Storm 编程模型


--> Topology: Storm 中运行的一个实时应用程序的名称

--> Spout: 在一个topology 中获取源数据流,然后转换为 topology 的内部源数据

--> Bolt: 接受数据然后执行处理,用户可以在其中执行自己想要的操作

--> Tuple: 一次消息传递的基本单元

--> Stream: 表示数据的流向

--> StreamGroup: 数据分组策略

--- Shuffle Grouping: 随机分组,尽量均匀的分布到下游 Bolt 中

--- Fields Grouping: 按字段分组,按数据中 field 值进行分组, 相同 field 值的 Tuple 被发送到相同的Task

--- All grouping: 广播

--- Global grouping: 全局分组, Tuple 被分配到一个 Bolt 中的同一个Task 中,实现事物性的 Topology

--- None grouping: 不分组

--- Direct grouping: 直接分组,指定分组


===> Storm 集群在 Zookeeper 中保存的数据结构

===> Strom 任务提交


数据 任务 实时 处理 分组 分布式 线程 节点 名称 文件 格式 消息 示例 运行 物理 集群 分配 配置 相同 方式 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 天津市摩尔互联网科技 上海卓越科技互联网 互联网科技网 云创客互联网科技公司 北京华百购互联网科技有限公司 青岛科技大学互联网大赛研究生 开一家科技互联网公司需要多少钱 米聚互联网科技南京有限公司排面 互联网科技研发水平 浙南科技城互联网大厦建设工程 互联网科技创新的路径 特约风豹互联网科技为什么扣费 广州千川互联网科技有限公司 互联网安防科技感 下一代互联网重大应用科技园 广州梦谷互联网科技有限公司领导 互联网科技手机排行榜 张家口科技产业互联网平台 科技互联网专业工作会议发言稿 互联网科技企业文化 有马互联网科技 广州紫鲸互联网科技 互联网 科技馆 玖二柒互联网科技公司待遇 须眉科技是互联网公司吗 宁波青枫互联网科技有限公司 电子科技大学互联网创业大赛 互联网时代科技型公司的机会 山东蛋芒互联网科技有限公司 伍佰万互联网科技是干嘛的
0