单节点搭建
环境准备:
Java 6+
Python 2.6.6+
上传、解压安装包
在storm目录中创建logs目录
mkdir logs
./storm help
启动Zookeeper
./bin/storm dev-zookeeper >> ./logs/zk.out 2>&1 &
启动Nimbus
./bin/storm nimbus >> ./logs/nimbus.out 2>&1 &
启动Storm UI
./bin/storm ui >> ./logs/ui.out 2>&1 &
启动Supervisor
./bin/storm supervisor >> ./logs/supervisor.out 2>&1 &
启动Logviewer
./bin/storm logviewer &
完全分布式搭建
环境准备:
Java 6+
Python 2.6.6+
部署ZooKeeper
版本3.4.5+ (高版本Zookeeper实现了对于自身持久化数据的定期删除功能)
(autopurge.purgeInterval; autopurge.snapRetainCount)
上传、解压安装包
在storm目录中创建logs目录
$ mkdir logs
修改配置文件
storm.yaml
Yet Another Markup Language (yaml)
配置文件内容:
storm.zookeeper.servers:
- "node1"
- "node2"
- "node3"
storm.local.dir: "/tmp/storm"
nimbus.host: “node1"
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
分发storm
启动Zookeeper集群
在node1上启动Nimbus
./bin/storm nimbus >> ./logs/nimbus.out 2>&1 &
./bin/storm ui >> ./logs/ui.out 2>&1 &
在node2、node3上启动Supervisor
(按照配置每个Supervisor上启动4个slots)
./bin/storm supervisor >> ./logs/supervisor.out 2>&1 &
启动Storm UI
./storm ui >> ./logs/ui.out 2>&1 &
通过http://node1:8080/访问
Nimbus
资源调度
任务分配
接收jar包
Supervisor
接收nimbus分配的任务
启动、停止自己管理的worker进程(当前supervisor上worker数量由配置文件设定)
Worker
运行具体处理运算组件的进程(每个Worker对应执行一个Topology的子集)
worker任务类型,即spout任务、bolt任务两种
启动executor
(executor即worker JVM进程中的一个java线程,一般默认每个executor负责执行一个task任务)
hadoop与storm对比图
Hadoop Storm
主节点 ResourceManager Nimbus
从节点 NodeManager Supervisor
应用程序 Job Topology
工作进程 Child - YarnChild Worker
计算模型 Map/Reduce Spout/Bolt
(split,map,shuffle,reduce)