菜鸟成长之Storm学习总结

有一个星期没有更新啦,说明是好事,至少开始做项目了,把所有的知识点放在项目上,果然会让人成长的更快;项目的隐私度比较高就不公开了~
今天总结一下新的内容,学习都有一个过程:从菜鸟到鸟人到大神;所以fighting就对了!

1.离线计算是什么?
离线计算:批量获取数据,批量传输数据,周期性批量计算数据,数据展示
代表技术:sqoop批量导入数据,HDFS批量存储数据,MapReduce批量计算数据,Hive批量计算数据

2.流式计算是什么??
流式计算:数据实时产生,数据实时传输,数据实时计算,实时展示
代表技术:Flume实时获取数据,kafka/metaQ实时数据存储,Storm/JStorm实时数据计算,Redis实时结果缓存,持久化存储(mysql)

Storm是什么??
Flume实时采集,低延迟
kafka消息队列,低延迟
storm实时计算,低延迟
Redis实时存储,低延迟
Storm用来实时处理数据,特点:低延迟,高可用,分布式,可扩展,数据不丢失

Storm与Hadoop的区别?
1.Storm用来实时计算,Hadoop用来离线计算
2.Storm处理的数据保存在内存中,源源不断;Hadoop处理的数据保存在文件系统中,一批一批
3.Storm的数据通过网站传输进来;Hadoop的数据保存在磁盘中

这里写图片描述

nimbus:负责资源分配和任务调度
Supervisor:负责接受nimbus分配的任务,启动和停止属于自己管理的worker进程
通过配置文件设置当前supervisor上启动多少个Worker
Worker:运行具体处理组件逻辑的进程;worker运行的任务类型只有两种,一种是Spout任务,一种是Bolt任务
Task:worker中每一个spout/bolt的线程称为一个task.不同的spout/bolt的task可能会共享一个物理线程,该线程称为executor

Storm编程:
1.Topology:Storm中运行的一个实时应用程序的名称(拓扑)
2.spout:在一个topology中获取源数据流的组件
通常情况下spout会从外部数据源中读取数据,然后转换为topology内部的源数据
3.Bolt:接受数据然后执行处理的组件,用户可以在其中执行自己想要的操作
4.tuple:一次信息传递的基本单元,理解为一组消息就是一个tuple
5.stream:表示数据的流向

流式计算一般架构图:
网站系统 ← Flume集群 → kafka集群 → storm集群 → Redis集群

1.其中flume用来获取数据
2.kafka用来临时保存数据
3.storm用来计算数据
4.Redis是个内存数据库,用来保存数据

Storm集群部署:
1.下载安装包
wget http://124.202.164.6/files/1139000006794ECA/apache.fayea.com/storm/apache-storm-0.9.6/apache-storm-0.9.6.tar.gz
2.解压安装包
tar -zxvf apache-storm-0.9.6.tar.gz -C /usr/local
mv apache-storm-0.9.6.tar.gz storm
vi /usr/local/storm/conf/storm.yaml
输入内容:

#指定storm使用的zk集群
storm.zookeeper.servers:
     - "minimaster"
     - "miniSlave1"
     - "miniSlave2"
#指定storm集群中的nimbus节点所在的服务器
nimbus.host: "minimaster"
#指定nimbus启动JVM最大可用内存大小
nimbus.childopts: "-Xmx1024m"
#指定supervisor启动JVM最大可用内存大小
supervisor.childopts: "-Xmx1024m"
#指定supervisor节点上,每个worker启动JVM最大可用内存大小
worker.childopts: "-Xmx768m"
#指定ui启动JVM最大可用内存大小,ui服务一般与nimbus同在一个节点上。
ui.childopts: "-Xmx768m"
#指定supervisor节点上,启动worker时对应的端口号,每个端口对应槽,每个槽位对应一个worker
supervisor.slots.ports:
    - 6700
    - 6701
    - 6702
    - 6703

3.分发安装包
scp -r /usr/local/storm miniSlave1:/usr/local
scp -r /usr/local/storm miniSlave2:/usr/local

4.启动集群
1.在nimbus.host所属的机器上启动nimbus服务
cd /usr/local
nohup ./storm nimbus &
2.在nimbus.host所属的机器上启动ui服务
nohup ./storm ui &
3.在其他各点击上启动supervisor服务
nohup ./storm supervisor &

5.查看集群
访问http://minimaster:8080,即可看到storm的ui界面

提交任务格式:
l storm jar 【jar路径】 【拓扑包名.拓扑类名】 【拓扑名称】
bin/storm jar examples/storm-starter/storm-starter-topologies-0.9.6.jar

Storm 消息容错机制:
对于每个Spout Tuple保存一个ack-val的校验值,它的初始值为0,然后每发射一个tuple或者ack一个tuple,tuple的id都要跟这个校验值异或一下,并且把得到的值更新为ack-val的新值

ack val 表示了整棵树的状态,无论这棵树多大,只需要这个固定大小的数字就可以跟踪整棵树;当消息被创建和被应答的时候都会有相同的消息id发送过来做异或;每当acker发现一棵树的ack val 值为0的时候,它就知道这棵树已经被完全处理了

总体介绍:
1.在storm中,可靠的信息处理机制是从spout开始的
2.一个提供了可靠的处理机制的spout需要记录他发射出去的tuple,当下游bolt处理tuple或者子tuple失败时spout能够重新发射
3.Storm通过调用Spout的nextTuple()发送一个tuple;为实现可靠的消息处理,首先要给每个发出的tuple带上唯一的ID,并且将ID作为参数传递给SpoutOutputCollector的emit()
给每个tuple指定ID告诉storm系统,无论处理成功还是失败,spout都要接收tuple树上所有节点返回的通知;如果处理成功,spout的ack()方法将会对编号是msgId的消息应答确认;如果处理失败或者超时,会调用fail()方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值