博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Storm 环境部署及简单使用
阅读量:6995 次
发布时间:2019-06-27

本文共 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 体系结构

image.png

===> Storm 运行流程

image.png

        --> 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 
-
/
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

        -->

 image.png

===> Storm 编程模型

image.png

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

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

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

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

转载地址:http://nsdvl.baihongyu.com/

你可能感兴趣的文章
jQuery 有条件排序
查看>>
有趣html5(两)----使用canvas结合剧本画在画布上的简单图(html5另一个强大)...
查看>>
可方便扩展的JIRA Rest Web API的封装调用
查看>>
strcmp的源码实现
查看>>
Java多线程7:死锁
查看>>
概率图形模型(PGM)学习笔记(四)-贝叶斯网络-伯努利贝叶斯-贝叶斯多项式...
查看>>
worker_pool的例子
查看>>
(转)gethostbyname() -- 用域名或主机名获取IP地址
查看>>
Android 插件化
查看>>
Yii2的深入学习--自动加载机制
查看>>
sqlserver修改增删改字段
查看>>
设计模式介绍、分类、原则
查看>>
超级好用的解析JSON数据的网站
查看>>
C#正则表达式匹配任意字符
查看>>
Objective-c中@interface、@implementation、@protocal
查看>>
Python yield 使用浅析
查看>>
支持移动设备的图片展示插件
查看>>
php file_exists无效解决办法
查看>>
Mac Jenkins 权限问题
查看>>
查找“CDN、负载均衡、反向代理”等大型网络真实IP地址的方法
查看>>