本文共 3474 字,大约阅读时间需要 11 分钟。
===> 什么是 Storm?
--> Twitter将Storm正式开源了,这是一个分布式的、容错的实时计算系统,遵循 Eclipse Public License 1.0。
--> Storm是由BackType开发的实时处理系统,BackType现在已在Twitter麾下。
--> Storm为分布式实时计算提供了一组通用原语,可被用于“流处理”之中,实时处理消息并更新数据库。
Storm也可被用于“连续计算”(continuous computation),对数据流做连续查询,在计算时就将结果以流的形式输出给用
户。它还可被用于“分布式RPC”,以并行的方式运行昂贵的运算。
--> Storm的主工程师Nathan Marz表示:Storm可以方便地在一个计算机集群中编写与扩展复杂的实时计算,
Storm用于实时处理,就好比 用于批处理。
Storm保证每个消息都会得到处理,而且它很快——在一个小集群中,每秒可以处理数以百万计的消息。更棒的是你可以使用
任意编程语言来做开发
===> Storm 支持离线计算和流式计算
--> 离线计算:批量获取数据,批量传输数据,周期性比量计算数据,数据展示(Sqoop-->HDFS--> MR ---> HDFS)
--- 代表技术:
-- Sqoop 批量导入数据
-- HDFS 批量存储数据
-- MapReduce 批量计算
-- Hive
--> 流式计算:数据实时产生,数据实时传输,数据实时计算,实时展示(Flume ---> Kafka ---> 流式计算 ---> Redis)
--- 代表技术:
-- Flume 实时获取数据
-- Kafka/metaq 实时数据存储
-- Storm/JStorm 实时数据计算
-- Redis 实时结果缓存,持久化存储(MySQL)
===> Storm 与 Hadoop 的区别
-->
Storm | Hadoop |
用于实时计算 | 用于离线计算 |
处理的数据保存在内存中,连连不断 | 处理的数据保存在文件系统中 |
数据通过网络传输进来 | 从 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 环境,参见:http://blog.51cto.com/songqinglong/2062909
--> 解压:
1 | tar zxf apache - storm - 1.0 . 3.tar .gz - C / app |
--> 配置环境变量
1 2 3 4 5 6 | vim ~ / .bash_profile # storm_home STORM_HOME = / app / apache - storm - 1.0 . 3 export STORM_HOME PATH = $STORM_HOME / bin :$PATH export PATH |
--> 修改配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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
--- 伪分部模式:
1 2 3 4 | storm nimbus & storm ui & # 可以通过 http 的方式查看:http://ip:8080 storm supervisor & storm logviewer & |
--- 完全分部式:
-- 主节点
1 2 3 | storm nimbus & storm ui & storm logviewer & |
-- 从节点
1 2 | storm supervisor storm logviewer |
--> 查看: http://ip:8080
===> Strom 完全分布式安装部署
--> 安装方式与伪分布式基本相同,只需要将安装目录copy 到其它节点上即可
===> Storm HA
--> 只需修改storm.yaml 文件中的 nimbus.seeds: ["bigdata1"] ,将主机加入到此列表中,并在主机上启动 nimbus 即可
===> Storm 常用命令
--> 提交任务
--- 格式:storm jar ***.jar [Toplogy名字:类名字] 别名
--- 示例:
1 | storm jar storm - starter - topologies - 1.0 . 3.jar org.apache.storm.starter.WordCountTopology MyWordCountExample |
--> 杀死任务
--- 格式:storm kill 任务名称 -w 10 注: -w 等待秒数
--- 示例:
1 | storm kill MyWordCountExample - w 10 |
--> 停用任务
--- 格式:storm deactivte 任务名称
--- 示例:
1 | storm deactivte MyWordCountExample |
--- 格式:storm activate 任务名称
--- 示例:
1 | storm activate MyWordCountExample |
--> 重新部署任务
--- 格式:storm rebalance 任务名称
--- 示例:
1 | storm rebalance MyWordCountExample |
--- (*) 当集群有所变动,此命令将会信用拓扑,然后在相应的超时时间内重启拓扑,重新分配任务
===> Storm 中 WordCount 程序流程分析
--> 通过查看 Storm UI 上每个组件的events 链接,可以查看 Storm 的每个组件(spout/blot)发送的消息
--> 需要开启 Debug 功能,在配置文件中添加下列参数并重新启动 storm
1 | "topology.eventlogger.executors" : 1 |
-->
===> Storm 编程模型
--> Topology: Storm 中运行的一个实时应用程序的名称
--> Spout: 在一个topology 中获取源数据流,然后转换为 topology 的内部源数据
--> Bolt: 接受数据然后执行处理,用户可以在其中执行自己想要的操作
--> Tuple: 一次消息传递的基本单元