20 Storm的理解
一、Storm概念
1、Storm流式处理:
Storm vs. mapreduce
Storm:面向实时
缺点:吞吐能力差
优点:时效性好,毫秒级别,增量式处理
Mapreduce:面向批量
缺点:时效性差
优点:吞吐能力强,适合批处理
2、Storm:没有持久化功能——》快
可靠性:保证消息处理
本地模式
原语:spout和bolt
3、Storm基本概念:
1)Stream:数据流
2)Tuple:最基本的数据单元
3)Topology:网络拓扑
Grouping:Shuffle/Fields
4)Spout:消息生产者
可以对接很多类型的数据流
收集消息处理的ack、fail
5)Bolt:消息处理逻辑
过滤、访问外部服务、数据格式化、聚合、汇总。。。
可以发送多条流
4、常见模式:
(1)流式
(2)持续计算——机器学习迭代
(3)分布式RPC——独立服务
5、架构:
主:Nimbus:分配工作
如果挂掉:重启之后,像什么事情没有发生一样——无状态(快速失败fail-fast)
意味着你可以用kill -9来杀死Nimbus和Supervisor进程, 然后再重启它们,就好像什么都没有发生过。这个设计使得Storm异常的稳定。
从:Supervisor:监控工作
快速失败fail-fast,监控Worker工作
Worker:工作进程
Task:线程
spout和bolt的线程都是task
executor进程,里面维护很多task,每次只会执行一个task
Zookeeper协调管理
6、容错:
架构容错
数据容错:
(1)timeout
(2)ack机制:本质是一个特殊的task
二、Storm环境安装
1. Storm源码包下载
http://mirror.bit.edu.cn/apache/storm/
2. 下载安装包
#Master
wget http://mirror.bit.edu.cn/apache/storm/apache-storm-0.9.3/apache-storm-0.9.3.tar.gz
tar zxvf apache-storm-0.9.3.tar.gz
3. 修改Storm配置文件
#Master
cd apache-storm-0.9.3/conf
vim storm.yaml
内容:
storm.zookeeper.servers:
- "master"
- "slave1"
- "slave2"
nimbus.host: "master"
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
- 6704
- 6705
4. 配置环境变量
#Master、Slave1、Slave2
vim ~/.bashrc
STORM_HOME=/usr/local/src/apache-storm-0.9.3
export PATH=$PATH:$STORM_HOME/bin
刷新环境变量source ~/.bashrc
5. 拷贝安装包
scp -r /usr/local/src/apache-storm-0.9.3 root@slave1:/usr/local/src/apache-storm-0.9.3
scp -r /usr/local/src/apache-storm-0.9.3 root@slave2:/usr/local/src/apache-storm-0.9.3
6. 启动集群
#master
vim /usr/local/src/apache-storm-0.9.3/bin/start-storm-master.sh
python /usr/local/src/apache-storm-0.9.3/bin/storm nimbus &
python /usr/local/src/apache-storm-0.9.3/bin/storm ui &
python /usr/local/src/apache-storm-0.9.3/bin/storm logviewer &
chmod +x /usr/local/src/apache-storm-0.9.3/bin/start-storm-master.sh
start-storm-master.sh
#Slave1、Slave2
vim /usr/local/src/apache-storm-0.9.3/bin/start-storm-slave.sh
python /usr/local/src/apache-storm-0.9.3/bin/storm supervisor &
python /usr/local/src/apache-storm-0.9.3/bin/storm logviewer &
chmod +x /usr/local/src/apache-storm-0.9.3/bin/start-storm-slave.sh
start-storm-slave.sh
7. 集群状态
-
Master
-
Slave1
-
Slave2
8. 监控页面
9. 关闭集群
#master、Slave1、Slave2
vim /usr/local/src/apache-storm-0.9.3/bin/stop-storm.sh
kill `ps aux| grep storm | grep -v 'grep' | awk '{print $2}'`
chmod +x /usr/local/src/apache-storm-0.9.3/bin/stop-storm.sh
stop-storm.sh