大数据学习笔记:Storm架构
在新技术学习的路上,需要掌握的东西越来越多,总是感觉时间紧迫,步履维艰,虽然千锋大数据培训机构的讲师总是告诉我们,时间有限,精力有限,做最重要的事情,但我们需要更多的努力才能破茧成蝶。
入学千锋大数据学习班,经过长时间的Spark学习,给我的感受就是:学习是一个漫长的过程, 路上总会有一些磕磕绊绊, 但收获到的必定是丰收硕果。每天都是那么的充实,已经好久没有这种感觉了。都是在为了自己以后的生活在奋斗,苦点累点又能算什么?沉下心来,努力学习,向着前方,勇敢前行! 下边是我的Storm学习笔记,希望能对同样奋斗在大数据培训中的你有所帮助:
Storm架构:master/slave
主节点:Nimbus
负责在集群上进行任务(Topology)的分发与资源的调度以及监控
工作节点:Supervisor
接收到任务请求后,启动一个或多个Worker进程来处理任务;默认情况下,一个Supervisor最多启动4个Worker
工作进程:Worker
在Supervisor中的子进程,存在着若干个Spout和Bolt线程,来负责Spout和Bolt组件处理任务(实际是开启的executor线程)
作业:Topologies(死循环,不会结束)
Spout:获取数据的组件
Bolt:处理数据的组件
Stream:Spout和Bolt之间数据流动的通道
Tuple:
1)Stream的最小组成单位,Spout向Bolt发送一次数据叫一个Tuple
2)同一个Stream中Tuple的类型相同,不同的Stream中可能相同/不同
3)一个key-value形式的Map
数据流分发策略(Stream groupings):
解决Spout和Bolt之间数据传输(发送Tuple元组)的问题
1)shuffleGrouping:
随机派发Stream中的Tuple到Bolt中
2)fieldsGrouping:
根据字段的哈希值与Bolt个数进行取模操作然后进行分组发送,一个节点是一个Worker, 一个Bolt是一个task, 全部节点的Spout或Bolt的个数叫并发度。
Storm并发度设置:
1.Worker并发度:
首先按照集群规模和集群的物理位置来设定
一般会把Worker均分到每一个节点里, 一个supervisor默认设置一个Worker
2.Spout数量设定:
Spout总数默认等于Kafka(消息中间件)对应Topic的分区数,提高吞吐速度
一般一个Worker设置一个Spout
3.Bolt1数量设定:
首先根据数据量和处理数据的时间来设定
一般情况下, Bolt1的数量是Spout数量的2倍(根据项目进行修改)
4.Bolt2数量设定:
首先根据数据量和处理数据的时间来设定,因为Bolt1传过来的中间结果数据已经减少很多,Bolt2的数量可以酌情减少。
容错机制:异或方式<相同为0,不同为1>
tupleId - 产生新数据,会产生一个tupleId;
整个过程中的tupleId按顺序两两异或到最后
若结果为0,则数据正确,否则错误
messageId - 代表整条信息,API中指定提供给程序员,long型
rootId - 代表某条信息,提供给storm框架
出现数据运算失败的两种情况:
execute(){
1.异常(数据异常)
2.任务运行超时 -- 认为处理失败
}
因为数据发送时导致的数据重复发送问题, 如何解决?
Ⅰ.
1.比如对订单信息做处理, 处理成功后, 把订单信息ID存储到Redis(set)
2.信息发送时, 判断是否处理过此信息
execute(){
if()
else()
}
Ⅱ.
不作处理: 点击流日日志分析: pv, uv
指标分析: 订单人数, 订单金额
消息的可靠性保障和acker机制: open / nextTuple / ack / fail/ close
Ⅰ.Spout类:
在发送tuple时,Spout会提供一个msgId,用于在后续识别tuple;Storm会根据msgId跟踪创建的tuple树,直到某个tuple被完整处理,根据msgId调用最初发送tuple的Spout中ack()方法,检测到超时就调用fail()方法 -- 这两个方法的调用必须由最初创建这个tuple的Spout执行;当Spout从消息队列(Kafka/RocketMQ)中取出一条数据时,实际上没有被取出,而是保持一个挂起状态,等待消息完成的信号,挂起状态的信息不会被发送到其它的消费者;当该消息被"取出"时,队列会将消息体数据和一个唯一的msgId提供给客户端,当Spout的ack()/fail()方法被调用时,Spout根据发送的id向队列请求将消息从队列中移除/重新放入队列。
Ⅱ.acker任务:
高效的实现可靠性 -- 必须显式的在Bolt中调用定义在Spout中的ack()和fail()方法,Storm拓扑有一些特殊的称为"acker"的任务,负责跟踪Spout发送的tuple的DAG,当一个acker发现DAG结束后,它就会给创建Spout tuple的Spout任务发送一条消息,让这个任务来应答这个消息。acker并不会直接的跟踪tuple树,在acker树中存储了一个表,用于将Spout tuple的id与一对值相映射,id为创建这个tuple的任务id,第二个值为一个64bit的数字(ack val),这个值是这棵树中所有被创建的或者被应答的tuple的tuple id进行异或运算的结果值。
Ⅲ.移除可靠性:
1.将 Config.TOPOLOGY_ACKERS 设置为0
2.在SpoutOutputCollector.emit 方法中省略消息 id 来关闭 spout tuple 的跟踪功能
3.在发送 tuple 的时候选择发送“非锚定”的(unanchored)tuple
各位大数据爱好者,虽然现在学习之路很辛苦,前方的道路还有很多攻坚战要打,希望大家这段时间沉下心来,不管有多累,都要向着前方,不断的奔跑!
学习大数据开发,可以参考千锋提供的大数据学习路线,该学习路线提供完整的大数据开发知识体系,内容包含Linux&&Hadoop生态体系、大数据计算框架体系、云计算体系、机器学习&&深度学习。根据千锋提供的大数据学习路线图可以让你对学习大数据需要掌握的知识有个清晰的了解,并快速入门大数据开发。
猜你喜欢LIKE
相关推荐HOT
更多>>索引有什么作用?在mongodb中索引分为几类
索引(Index)是数据库中的一种数据结构,用来提高数据检索的效率。它们可以帮助数据库系统快速地定位和访问需要的数据。在 MongoDB 中,索引也很...详情>>
2023-04-11 13:43:47主键约束是什么意思?如何实现mysql主键约束
主键约束是一种在数据库中用于保证表中某个列的唯一性和非空性的约束,该列将成为表的主键。主键的作用是为了唯一标识表中的每一行数据,以方便...详情>>
2023-03-17 16:51:01eureka和zookeeper的区别对比
Eureka和Zookeeper都是服务发现和注册的工具,但它们有以下几个不同点:架构设计:Eureka采用了集中式的架构,其中一个服务作为Eureka Server,...详情>>
2023-03-07 15:35:18Zookeeper和Eureka的区别都有哪些?
Zookeeper和Eureka都是分布式系统中常用的服务发现和注册组件,它们的主要区别如下:数据一致性:Zookeeper是一个高度可靠的分布式数据一致性解...详情>>
2023-03-07 15:26:19zookeeper和eureka的区别介绍
1.架构设计:ZooKeeper是一个分布式的协调服务,它提供了高可用、高可靠性的数据存储和协调服务,可以作为分布式系统中的一个通用组件使用。而E...详情>>
2023-03-03 15:00:46大数据培训问答更多>>
新大数据都学什么?5大核心知识必学内容有哪些
新大数据报班多少钱?如何选择培训机构
新人工智能学什么?自学可以成才吗
新数据处理包括哪些内容?是不是所有课程需要分别报课
新大数据分析需要学什么?怎么学比较好
新人工智能专业学什么?人工智能有哪些课程
新大数据数据分析师要学什么?好就业吗
大数据面试题库 更多>>
大数据的五个V是什么?
数据及集群管理(三)
数据及集群管理(二)
数据及集群管理(一)
大数据之hbase的优化读数据方面
大数据之hbase的优化写入数据方面
- 北京校区
- 大连校区
- 广州校区
- 成都校区
- 杭州校区
- 长沙校区
- 合肥校区
- 南京校区
- 上海校区
- 深圳校区
- 武汉校区
- 郑州校区
- 西安校区
- 青岛校区
- 重庆校区
- 太原校区
- 沈阳校区
- 南昌校区
- 哈尔滨校区