Storm架构及搭建
架构
Nimbus 分配任务、资源调度、上传jar包
ZooKeeper 代理协调、健康检查(心跳)
Supervisor 接收Nimbus任务、开启/关闭自己管理的worker进程(可以开启n个woker)
Worker 运行具体处理运算组件的进程(每个Worker对应执行一个Topology的子集)
执行任务(可以执行n个task(spolt–推送数据/bolt–逻辑单元处理)任务)
[外链图片转存失败(img-xdvbyLGu-1563925043849)(C:\Users\86158\AppData\Roaming\Typora\typora-user-images\1561290490904.png)]
Storm架构流程
客户端将任务给Nimbus(主节点),主节点将任务交给ZK(代理协调),再由Supervisor(从节点)定期去ZK中寻找分配给自己的节点的任务,找到任务后开启/关闭1-n个自己的worker(进程),一个worker中会包含多个(executor)线程,一个executor对应1-n个task任务,一个task任务就是单一的spout/bolt。
进程只是获取资源,每个线程才是计算数据的具体的角色
Supervisor只起到关闭或者开启自己的worker进程的功能
Worker也可以直接从ZK上获取任务
ZooKeeper在架构中的作用
1.代理协调,具体详情如上
2.健康检查
ZK保留着主节点、从节点、线程的心跳记录。
情况1:ZK定期检查主节点和从节点状况,如果从节点宕机,ZK就会向主节点汇报,再由主节点重新分配任务,将新任务传递给从ZK,再由ZK分配新任务。
情况2:当前从节点无故障,但连接从节点的n个线程中的一个线程(worker)故障,ZK与线程心跳不通时,ZK将故障线程的任务交由其他线程执行
Storm并发机制
原wcountBolt是一个线程执行2个任务 即:executors 2 ,tasks 4
将其改成一个线程执行一个任务
…0.10.0]./bin/storm rebalance -n 4 -e wcount=4
【storm rebalance topology-name 【-w wait-time-secs】【-n new-num-workers】 【-e component=parallelism】*】
topology-name ---------线程任务名
-w wait-time-secs ---------等待时间后执行(省略)
-n new-num-workers ---------设置新的woker数量
-e component=parallelism ---------相关组件设置,设置线程数
storm通讯机制
woker进程间的数据通信
ZMQ(开源的消息传递框架)
Netty(基于NIO的网络框架,更加高效)
woker内部的数据通信
Disruptor
队列形式
搭建storm集群
1、配置zookeeper,jdk
2、将stormyasuobao解压到/opt
3、配置:
#配置zookeeper的地址
storm.zookeeper.servers:
“sxt002”
“sxt003”
“sxt004”
#配置nimbus的位置
nimbus.host: “sxt004”
指定每个supervisor上worker的通信端口
有几个端口就有几个worker
supervisor.slots.ports:
-6700
-6701
-6702
-6703
4、在sxt003和sxt004上分发storm包
scp -r 解压包 root@sxt003:pwd
scp -r 解压包 root@sxt004:`pwd
5、在解压好的目录中创建logs目录,用于寻找错误
6、在含有zk集群的虚拟机上启动zookeeper集群
zkServer.sh start
7、启动storm的进程
sxt004:
nimbus
storm nimbus >> logs/nimbus.out 2>&1 &
ui
storm ui >> logs/ui.out 2>&1 &
sxt002:
supervisor
storm supervisor >> logs/supervisor.out 2>&1 &
sxt003:
supervisor
storm supervisor >> logs/supervisor.out 2>&1 &
8.等待集群启动后进入网页查看
sxt004:8080