1 storm
对比Hadoop的批处理,Storm是个实时的、分布式以及具备高容错的计算系统
同hadoop一样,strom也可以处理大批量的数据,storm可以保证高可靠性的前提下还可以让批处理进行的实时
2 storm架构
Nimbus守护进程,用于分配代码、布置任务及故障检测
Supervisor守护进程用于监听工作,开始并终止工作进程
Nimbus和Supervisor快速失败,由zookeeper管理
ZeroMQ是其内部消息系统
Topology一个job,组件接口为Spout/Bolt
Spout是在Topology中产生数据流的组件
Bolt是在Topology中接收数据然后执行处理的组件
3 storm使用场景
3.1 流聚合
流聚合把两个或者多个数据流聚合成一个数据流
3.2 批处理
将一组tuple一起处理,而不是一个个单独处理,为了性能原因
3.3 BasicBolt
读入一个tuple
根据这个输入tuple发射一个或者多个tuple
在execute的方法的最后ack哪个输入tuple
3.4 缓存
3.5 topN
4 storm的消息分发策略
4.1 随机分组 (shuffle grouping)
随机分发tuple到bolt任务,保证每个任务获得相等数量的tuple
4.2 字段分组 (fields grouping)
根据指定字段分割数据流,并进行分组
4.3 全部分组 (all grouping)
tuple被复制到bolt的所有任务
4.4 全局分组(global grouping)
全部流都分配到bolt的同一个任务
4.5 无分组(non grouping)
无分组相当于随机分组
4.6 直接分组(direct grouping )
元组生产这决定tuple由哪个元祖处理者任务接收
5 storm安装
jdk、zookeeper安装
centos7自带python2.7
storm0.9之前底层采用zeroMQ,0.9之后底层采用netty
master Nimbus ui
slave1 Supervisor
slave2 Supervisor
[root@master local]# tar -zxvf apache-storm-1.0.3.tar.gz
[root@master local]# cd apache-storm-1.0.3/conf/
[root@master conf]# vi storm.yaml
storm.zookeeper.servers:
- "master"
- "slave1"
- "slave2"
storm.zookeeper.port: 2181
storm.zookeeper.root: "/storm"
nimbus.seeds: ["master"]
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
storm.local.dir: "/usr/local/apache-storm-1.0.3/data/"
ui.port: 10080
[root@master local]# scp -r apache-storm-1.0.3 slave1:/usr/local/
[root@master local]# scp -r apache-storm-1.0.3 slave2:/usr/local/
[root@master apache-storm-1.0.3]# bin/storm nimbus >/dev/null 2>&1 &
[root@master apache-storm-1.0.3]# bin/storm ui >/dev/null 2>&1 &
[root@slave1 apache-storm-1.0.3]# bin/storm supervisor >/dev/null 2>&1 &
[root@slave2 apache-storm-1.0.3]# bin/storm supervisor >/dev/null 2>&1 &
6 strom组件
每一个supervisor运行着若干个worker
每一个worker中运行着Task,Task包含spout或者bolt
7 storm对象的生命周期
7.1 spout方法调用顺序
declareOutputFields()
open()
activate()
nextTuple() 循环调用
deactivate()
7.2 bolt方法调用顺序
declareOutputFields()
prepare()
execute() 循环调用
8 storm高可用
会将失效的worker转移到别的supervisor节点
在tuple tree中创建了一个新节点,明确通知Storm
当处理完一个单独的消息时,明确通知Storm,这棵tuple tree的变化状态
通过上面两步,storm就可以检测一个tuple tree何时被完全处理,并且会调用相关ack或fail
总结来说,就是消息处理失败了,会调用fail方法,可在该方法中重新发送一次消息
对比Hadoop的批处理,Storm是个实时的、分布式以及具备高容错的计算系统
同hadoop一样,strom也可以处理大批量的数据,storm可以保证高可靠性的前提下还可以让批处理进行的实时
2 storm架构
Nimbus守护进程,用于分配代码、布置任务及故障检测
Supervisor守护进程用于监听工作,开始并终止工作进程
Nimbus和Supervisor快速失败,由zookeeper管理
ZeroMQ是其内部消息系统
Topology一个job,组件接口为Spout/Bolt
Spout是在Topology中产生数据流的组件
Bolt是在Topology中接收数据然后执行处理的组件
3 storm使用场景
3.1 流聚合
流聚合把两个或者多个数据流聚合成一个数据流
3.2 批处理
将一组tuple一起处理,而不是一个个单独处理,为了性能原因
3.3 BasicBolt
读入一个tuple
根据这个输入tuple发射一个或者多个tuple
在execute的方法的最后ack哪个输入tuple
3.4 缓存
3.5 topN
4 storm的消息分发策略
4.1 随机分组 (shuffle grouping)
随机分发tuple到bolt任务,保证每个任务获得相等数量的tuple
4.2 字段分组 (fields grouping)
根据指定字段分割数据流,并进行分组
4.3 全部分组 (all grouping)
tuple被复制到bolt的所有任务
4.4 全局分组(global grouping)
全部流都分配到bolt的同一个任务
4.5 无分组(non grouping)
无分组相当于随机分组
4.6 直接分组(direct grouping )
元组生产这决定tuple由哪个元祖处理者任务接收
5 storm安装
jdk、zookeeper安装
centos7自带python2.7
storm0.9之前底层采用zeroMQ,0.9之后底层采用netty
master Nimbus ui
slave1 Supervisor
slave2 Supervisor
[root@master local]# tar -zxvf apache-storm-1.0.3.tar.gz
[root@master local]# cd apache-storm-1.0.3/conf/
[root@master conf]# vi storm.yaml
storm.zookeeper.servers:
- "master"
- "slave1"
- "slave2"
storm.zookeeper.port: 2181
storm.zookeeper.root: "/storm"
nimbus.seeds: ["master"]
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
storm.local.dir: "/usr/local/apache-storm-1.0.3/data/"
ui.port: 10080
[root@master local]# scp -r apache-storm-1.0.3 slave1:/usr/local/
[root@master local]# scp -r apache-storm-1.0.3 slave2:/usr/local/
[root@master apache-storm-1.0.3]# bin/storm nimbus >/dev/null 2>&1 &
[root@master apache-storm-1.0.3]# bin/storm ui >/dev/null 2>&1 &
[root@slave1 apache-storm-1.0.3]# bin/storm supervisor >/dev/null 2>&1 &
[root@slave2 apache-storm-1.0.3]# bin/storm supervisor >/dev/null 2>&1 &
6 strom组件
每一个supervisor运行着若干个worker
每一个worker中运行着Task,Task包含spout或者bolt
7 storm对象的生命周期
7.1 spout方法调用顺序
declareOutputFields()
open()
activate()
nextTuple() 循环调用
deactivate()
7.2 bolt方法调用顺序
declareOutputFields()
prepare()
execute() 循环调用
8 storm高可用
会将失效的worker转移到别的supervisor节点
在tuple tree中创建了一个新节点,明确通知Storm
当处理完一个单独的消息时,明确通知Storm,这棵tuple tree的变化状态
通过上面两步,storm就可以检测一个tuple tree何时被完全处理,并且会调用相关ack或fail
总结来说,就是消息处理失败了,会调用fail方法,可在该方法中重新发送一次消息