Storm(⼀)分布式实时⼤数据处理框架
⽂章⽬录
Storm介绍
Storm是Twitter开源的分布式实时⼤数据处理框架,最早开源于github,从0.9.1版本之后,归于Apache社区,被业界称为实时版Hadoop。随着越来越多的场景对Hadoop的MapReduce⾼延迟⽆法容忍,⽐如⽹站统计、推荐系统、预警系统、⾦融系统(⾼频交易、股票)等等,⼤数据实时处理解决⽅案(流计算)的应⽤⽇趋⼴泛,⽬前已是分布式技术领域最新爆发点,⽽Storm更是流计算技术中的佼佼者和主流。
为什么⽤storm?
Apache Storm是⼀个免费的开源分布式实时计算系统。Apache Storm使得可靠地处理⽆界数据流变得很容易,就像Hadoop处理批处理⼀样,它可以进⾏实时处理。Apache Storm很简单,可以与任何编程语⾔⼀起使⽤,⽽且使⽤起来很有趣!
Apache Storm有很多⽤例:实时分析、在线机器学习、连续计算、分布式RPC、ETL等等。Apache Storm速度很快:⼀个基准测试将它的速度控制在每秒处理每个节点超过100万个元组。它是可扩展的,
容错,保证哟。
Storm的核⼼组件
Nimbus:即Storm的Master,负责资源分配和任务调度。⼀个Storm集只有⼀个Nimbus。
Supervisor:即Storm的Slave,负责接收Nimbus分配的任务,管理所有Worker,⼀个Supervisor节点中包含多个Worker进程。
Worker:⼯作进程,每个⼯作进程中都有多个Task。一个线程可以包含多个进程
Task:任务,在 Storm 集中每个 Spout 和 Bolt 都由若⼲个任务(tasks)来执⾏。每个任务都与⼀个执⾏线程相对应。
Topology:计算拓扑,Storm 的拓扑是对实时计算应⽤逻辑的封装,它的作⽤与 MapReduce 的任务(Job)很相似,区别在于MapReduce 的⼀个 Job在得到结果之后总会结束,⽽拓扑会⼀直在集中运⾏,直到你⼿动去终⽌它。拓扑还可以理解成由⼀系列通过数据流(StreamGrouping)相互关联的 Spout 和 Bolt 组成的的拓扑结构。
Stream:数据流(Streams)是 Storm中最核⼼的抽象概念。⼀个数据流指的是在分布式环境中并⾏创建、处理的⼀组元组
(tuple)的⽆界序列。数据流可以由⼀种能够表述数据流中元组的域(fields)的模式来定义。
Spout:数据源(Spout)是拓扑中数据流的来源。⼀般 Spout会从⼀个外部的数据源读取元组然后将他们发送到拓扑中。根据需求的不同,Spout既可以定义为可靠的数据源,也可以定义为不可靠的数据源。⼀个可靠的Spout能够在它发送的元组处理失败时重新发送该元组,以确保所有的元组都能得到正确的处理;相对应的,不可靠的 Spout就不会在元组发送之后对元组进⾏任何其他的处理。⼀个Spout可以发送多个数据流。
Bolt:拓扑中所有的数据处理均是由 Bolt完成的。通过数据过滤(filtering)、函数处理(functions)、聚合(aggregations)、联结(joins)、数据库交互等功能,Bolt⼏乎能够完成任何⼀种数据处理需求。⼀个 Bolt 可以实现简单的数据流转换,⽽更复杂的数据流变换通常需要使⽤多个 Bolt并通过多个步骤完成。 Stream grouping:为拓扑中的每个 Bolt的确定输⼊数据流是定义⼀个拓扑的重要环节。数据流分组定义了在 Bolt 的不同任务(tasks)中划分数据流的⽅式。在 Storm中有⼋种内置的数据流分组⽅式。
Reliability:可靠性。Storm 可以通过拓扑来确保每个发送的元组都能得到正确处理。通过跟踪由 Spout发出的每个元组构成的元组树可以确定元组是否已经完成处理。每个拓扑都有⼀个“消息延时”参数,如果 Storm在延时时间内没有检测到元组是否处理完成,就会将该元组标记为处理失败,并会在稍后重新发送该元组。
storm特征
官⽹ /
Storm是个实时的、分布式以及具备⾼容错的计算系统
Storm进程常驻内存
Storm数据不经过磁盘,在内存中处理
架构
Nimbus
Supervisor
Worker
编程模型
DAG (Topology)
Spout
Bolt
数据传输
ZMQ(twitter早期产品):ZeroMQ 开源的消息传递框架,并不是⼀个MessageQueue
Netty:Netty是基于NIO的⽹络框架,更加⾼效。(之所以Storm 0.9版本之后使⽤Netty,是因为ZMQ的license和Storm的license不兼容。)
⾼可靠性
- 异常处理
- 消息可靠性保障机制(ACK)
可维护性
StormUI 图形化监控接⼝
流式处理
(异步 与 同步)客户端提交数据进⾏结算,并不会等待数据计算结果
逐条处理:例:ETL(数据清洗)extracted transform load
统计分析:例:
计算PV、UV、访问热点 以及 某些数据的聚合、加和、平均等.
客户端提交数据之后,计算完成结果存储到Redis、HBase、MySQL或者其他MQ当中,客户端并不关⼼最终结果是多少。
实时请求
实时请求应答服务(同步)
Drpc
实时请求处理
例:图⽚特征提取
例:图⽚特征提取
Storm 架构设计与Hadoop架构对⽐
storm与MapReduce区别
Storm:进程、线程常驻内存运⾏,数据不进⼊磁盘,数据通过⽹络传递。
MapReduce:为TB、PB级别数据设计的批处理计算框架。
storm与Spark Streaming区别
Storm:纯流式处理
专门为流式处理设计
数据传输模式更为简单,很多地⽅也更为⾼效
并不是不能做批处理,它也可以来做微批处理,来提⾼吞
Spark Streaming:微批处理
将RDD做的很⼩来⽤⼩的批处理来接近流式处理
基于内存和DAG可以把处理任务做的很快
Storm计算模式
Storm程序再Storm集中运⾏的⽰例图如下:
Topology - DAG有向⽆环图的实现
对于Storm实时计算逻辑的封装
即,由⼀系列通过数据流相互关联的Spout、Bolt所组成的拓扑结构
⽣命周期:此拓扑只要启动就会⼀直在集中运⾏,直到⼿动将其kill,否则不会终⽌(区别于MapReduce当中的Job,MR当中的Job在计算执⾏完成就会终⽌)
具体流程是怎么⾛,可以通过查看下⾯这张图来进⾏了解。
⽰例图:
图⽚有三种模式,解释如下:
第⼀种⽐较简单,就是由⼀个Spout获取数据,然后交给⼀个Bolt进⾏处理;
第⼆种稍微复杂点,由⼀个Spout获取数据,然后交给⼀个Bolt进⾏处理⼀部分,然后在交给下⼀个Bolt进⾏处理其他部分。
第三种则⽐较复杂,⼀个Spout可以同时发送数据到多个Bolt,⽽⼀个Bolt也可以接受多个Spout或多个Bolt,最终形成多个数据流。但是这种数据流必须是有⽅向的,有起点和终点,不然会造成死循环,数据永远也处理不完。就是Spout发给Bolt1,Bolt1发给Bolt2,Bolt2⼜发给了Bolt1,最终形成了⼀个环状。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论