spark框架介绍
spark与hadoop是大数据中开发不可缺少的一部分。spark也是由很多的组件构成。
我们可以将数据处理分为批处理(hadoop)与流处理(spark)
批处理就像我们的直电梯,送完一批再送第二批;流处理就像我们的电梯,一直在运送。
storm流式处理框架
storm是个实时的、分布式、高容错的计算框架
- Storm进程常驻内存
- Storm数据不经过磁盘,在内存中处理
storm的拓扑结构是spout+bolt,整体是有向无环图(DAG)的模型。
各组件如下:
架构(所有的架构都是一个主节点+从节点)
- Nimbus(主节点 1.资源调度 2.任务分配 3.上传jar包)
- Supervisor(从节点 指派任务,开关worker)
- Worker(进程 实际的计算)
编程模型
- DAG (Topology)
- Spout (负责 推送数据)
- Bolt (负责 接受+处理数据)
数据传输
- ZMQ(twitter早期产品)
- ZeroMQ 开源的消息传递框架,并不是一个MessageQueue
- Netty
- Netty是基于NIO的网络框架,更加高效。(之所以Storm 0.9版本之后使用Netty,是因为ZMQ的license和Storm的license不兼容。)
spark具有高可靠性与可维护性
高可靠性
- 异常处理 (比如节点损坏)
- 消息可靠性保障机制(ACK) (类似网络协议中的三次握手,四次挥手)
可维护性
- StormUI 图形化监控接口(可以展示当前的集群状态 包括cluster summary集群总览,topology summary提交作业,supervisor summary从节点)
Storm – 流式处理
client客户端:负责收集日志等数据
MQ消息队列:负责将数据转换为一条一条的消息
spout推送源:负责将消息推送至bolt
bolt处理:负责处理数据
storage:负责将处理好的数据存储起来,可以是Hbase等数据库
-
流式处理(异步 与 同步)
异步:客户端提交数据进行结算,并不会等待数据计算结果
同步:每处理完一条数据,需要向客户端返回,然后再处理第二条 -
逐条处理
例:ETL(数据清洗)extracted transform load -
统计分析
例:计算PV、UV、访问热点 以及 某些数据的聚合、加和、平均等
客户端提交数据之后,计算完成结果存储到Redis、HBase、MySQL或者其他MQ当中,
客户端并不关心最终结果是多少。
spark通过drpc(disriputed remote procedure call分布式远程处理请求)进行实时请求应答
最后再来看一下spark与hadoop的区别:
- Storm:进程、线程常驻内存运行,数据不进入磁盘,数据通过网络传递。
- MapReduce:为TB、PB级别数据设计的批处理计算框架。
还有storm与Spark Streaming的区别: - Storm:纯流式处理
专门为流式处理设计
数据传输模式更为简单,很多地方也更为高效
并不是不能做批处理,它也可以来做微批处理,来提高吞吐 - Spark Streaming:微批处理
将RDD做的很小来用小的批处理来接近流式处理
基于内存和DAG可以把处理任务做的很快