Storm核心概念
Nimbus:Storm集群主节点,负责资源分配和任务调度。我们提交任务和截止任务都是在Nimbus上操作的。一个Storm集群只有一个Nimbus节点。
Supervisor:Storm集群工作节点,接受Nimbus分配任务,管理所有Worker。
Worker:工作进程,每个工作进程中都有多个Task。
Task:任务,每个Spout和Bolt都是一个任务,每个任务都是一个线程。
Topology:计算拓扑,包含了应用程序的逻辑。
Stream:消息流,关键抽象,是没有边界的Tuple序列。
Spout:消息流的源头,Topology的消息生产者。
Bolt:消息处理单元,可以过滤、聚合、查询数据库。
Stream grouping:消息分发策略,一共6种,定义每个Bolt接受何种输入。
Reliability:可靠性,Storm保证每个Tuple都会被处理。
![](/qrcode.jpg)
Storm.yaml常用配置项
配置选项名称 |
配置选项作用 |
topology.max.task.parallelism |
每个Topology运行时最大的executor数目 |
topology.workers |
每个Topology运行时的worker的默认数目,若在代码中设置,则此选项值被覆盖 |
storm.zookeeper.servers |
zookeeper集群的节点列表 |
storm.local.dir |
Storm用于存储jar包和临时文件的本地存储目录 |
storm.zookeeper.root |
Storm在zookeeper集群中的根目录,默认是“/” |
ui.port |
Storm集群的UI地址端口号,默认是8080 |
nimbus.host: |
Nimbus节点的host |
supervisor.slots.ports |
Supervisor 节点的worker占位槽,集群中的所有Topology公用这些槽位数,即使提交时设置了较大数值的槽位数,系统也会按照当前集群中实际剩余的槽位数来 进行分配,当所有的槽位数都分配完时,新提交的Topology只能等待,系统会一直监测是否有空余的槽位空出来,如果有,就再次给新提交的 Topology分配 |
supervisor.worker.timeout.secs |
Worker的超时时间,单位为秒,超时后,Storm认为当前worker进程死掉,会重新分配其运行着的task任务 |
drpc.servers |
在使用drpc服务时,drpc server的服务器列表 |
drpc.port |
在使用drpc服务时,drpc server的服务端口 |
Storm运行依赖zookeeper,需启动zookeeper,在此不做过多介绍可参考:https://www.cnblogs.com/zhaojiankai/p/7126181.html
Zookeeper集群在Storm集群中的作用:
Zookeeper集群负责Nimbus节点和Supervior节点之间的通信,监控各个节点之间的状态。比如通常我们提交任务的时候是在Nimbus节点上执行的,Nimbus节点通过zk集群将任务分发下去,而Supervisor是真正执行任务的地方。Nimbus节点通过zk集群监控各个Supervisor节点的状态,当某个Supervisor节点出现故障的时候,Nimbus节点就会通过zk集群将那个Supervisor节点上的任务重新分发,在其他Supervisor节点上执行。这就意味着Storm集群也是高可用集群,如果Nimbus节点出现故障的时候,整个任务并不会停止,但是任务的管理会出现影响,通常这种情况下我们只需要将Nimbus节点恢复就可以了。Nimbus节点不支持高可用,这也是Storm目前面临的问题之一。不过一般情况下,Nimbus节点的压力不大,通常不会出现问题。
一般情况下,Zookeeper集群的压力并不大,一般只需要部署3台就够了。Zookeeper集群在Storm集群中逻辑上是独立的,但在实际部署的时候,一般会将zk节点部署在Nimbus节点或Supervisor节点上。
安装:
1.解压安装文件到制定的目录,并把storm加入到环境变量
wget http://apache.fayea.com/storm/apache-storm-1.0.0/apache-storm-1.0.0.tar.gz
sudo tar -zxvf apache-storm-0.9.6.tar.gz -C /usr/local cd /usr/local sudo mv apache-storm-0.9.6 storm
sudo vi /etc/profile export STORM_HOME=/usr/local/storm export PATH=$PATH:${STORM_HOME}/bin sudo source /etc/profile
2.配置storm.yaml
storm.zookeeper.servers:
- "node3"
nimbus.seeds: ["node3"]
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
ui.port: 8889
storm.local.dir: "/usr/local/storm/data"
注意:以上配置,凡是有冒号的地方,冒号后都要有个空格。
将配置好的拷贝到其余两台机器上
[root@log1 local]# scp -pr apache-storm-1.0.0 [email protected]:/usr/local/ [root@log1 local]# scp -pr apache-storm-1.0.0 [email protected]:/usr/local/
启动 nimbus、supervisor、ui
cd /usr/local/storm/bin
./storm nimbus
./storm supervisor
./storm ui
Storm常用命令
1、任务提交命令:storm jar 【jar路径】 【拓扑包名.拓扑类名】 【拓扑名称】
storm jar /export/servers/storm/examples/storm-starter/storm-starter-topologies-1.0.3.jar org.apache.storm.starter.WordCountTopology wordcount
与hadoop不同的是:不需要指定输入输出路径 如:hadoop jar /usr/local/wordcount.jar /data.txt /wcout
##杀死任务命令格式:storm kill name -w seconds storm kill wordcount -w 10 ##停用任务命令格式:storm deactivte name storm deactivte wordcount ##启用任务命令格式:storm activate name storm activate wordcount ##平衡任务命令格式:storm rebalance name storm rebalance wordcount