大数据实时计算框架:storm
(一)什么是实时计算?跟离线计算的区别?常见的实时计算框架?
1.什么是实时计算?流式计算
举例:自来水厂处理水的过程(图)
特点:源源不断
任务类型:采集数据-->Spout任务
处理数据-->bolt任务
2.跟离线计算的区别
(1)离线计算:MapReduce、spark core
采集数据:SQOOP,flume
强调是批处理
(2)实时计算:storm
采集数据:flume
强调是源源不断
3.常见的实时计算框架
(1)Apache storm
(2)Spark Streaming
(3)JStorm
(4)Flink
(二)storm架构
主从
nimbus+supervisor
(三)伪分布式Storm安装
解压
设置环境变量
STORM_HOME=/root/training/apache-storm-1.3.0
export STORM_HOME
PATH=$STORM_HOME/bin:$PATH
export PATH
核心配置文件:conf/storm.yaml
storm.zookeeper.servers:
- "bigdata111"
nimbus.seeds:["bigdata111"]
配置Supervisor上的slot的个数(端口号)
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
在nimbus配置一个目录,保存任务和元信息 在nimbus在创建一个tmp目录
storm.local.dir: "/root/training/apache-storm-1.0.3/tmp"
启动:
- 主节点:storm nimbus &
- 从节点:storm supervisor &
UI:storm ui & //地址:192.168.11.111:8080
(四)全分布式Storm
启动zookeeper
解压
设置环境变量
STORM_HOME=/root/training/apache-storm-1.3.0
export STORM_HOME
PATH=$STORM_HOME/bin:$PATH
export PATH
核心配置文件:conf/storm.yaml
storm.zookeeper.servers:
- "hadoop112"
- "hadoop113"
- "hadoop114"
nimbus.seeds:["hadoop112"]
配置Supervisor上的slot的个数(端口号)
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
在nimbus配置一个目录,保存任务和元信息 在nimbus在创建一个tmp目录
storm.local.dir: "/root/training/apache-storm-1.0.3/tmp"
复制storm到hadoop113/hadoop114节点
启动:
- 主节点:storm nimbus &
- 从节点:storm supervisor &
UI:storm ui & //地址:192.168.11.112:8080
(五)storm HA
步骤和全分布式一致
nimbus.seeds:["hadoop112","hadoop113"]
启动:
- 主节点:storm nimbus &
- 备用主节点:storm nimbus &
- 从节点:storm supervisor &
UI:storm ui & //地址:192.168.11.112:808(主节点上)
(六)storm demo
启用Debug
核心配置文件:conf/storm.yaml
"topology.eventlogger.executors": 1
启动节点后启动日志查看器 storm logviewer &
案例: wordcount程序
提交任务命令格式:storm jar 【jar路径】 【拓扑包名.拓扑类名】 【拓扑名称】
在storm/example/storm-starter目录下
storm jar storm-starter-topologies-1.0.3.jar org.apache.storm.starter.WordCountTopology MyWordCount //别名
//将jar包上传到nimbus的tmp目录下
(七)开发Wordcount程序
第一级:WordCountSpout 采集数据组件
第二级:WordCountSplitBolt 单词拆分组件
注意:组件之间传递都是Tuple Tuple = schema+ 数据
数据分组的策略(数据到底交给哪个下级组件处理)
( 1 ) 随机分组
( 2 ) 按字段分组 同MapReduce
( 3 ) 广播分组 (所有下级组件都能收到这条数据)
第三级:WordCountTotalBolt 单词计数组件
注意:第二级和三级之间用按字段分组策略
(1)开发WordCountSpout组件
public class WordCountSpout extends BaseRichSpout {
private static final long serialVersionUID = 1L ;
private String [ ] datas = {
"I love Beijing" , "I love China" , "Beijing is the capital of China" } ;
private SpoutOutputCollector collector;
@Override
public void nextTuple ( ) {
Utils . sleep ( 2000 ) ;
int random = ( new Random ( ) ) . nextInt ( 3 ) ;
String data = datas[ random] ;
System . out. println<