spark streaming与流处理

This commit is contained in:
罗祥 2019-05-18 16:11:14 +08:00
parent 282f668f24
commit 0105dc864d
6 changed files with 87 additions and 9 deletions

View File

@ -82,16 +82,16 @@
**Spark SQL :**
1. DataFrame和DateSet
1. [Spark SQL之 DateFrame 和 DataSet](https://github.com/heibaiying/BigData-Notes/blob/master/notes/SparkSQL-Dataset&DataFrame.md)
2. Spark SQL之常用SQL语句
3. External Data Source
**Spark Streaming **
1. Spark Streaming简介
2. DStream常用函数
3. Spark Streaming 整合 flume
4. Spark Streaming 整合 kafka
1. [Spark Streaming简介](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Spark-Streaming与流处理.md)
2. DStream常用操作详解
3. Spark Streaming 整合 Flume
4. Spark Streaming 整合 Kafka
## 四、Flink

View File

@ -0,0 +1,78 @@
# Spark Streaming与流处理
<nav>
<a href="#一流处理">一、流处理</a><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#11-静态数据处理">1.1 静态数据处理</a><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#12-流处理">1.2 流处理</a><br/>
<a href="#二Spark-Streaming">二、Spark Streaming</a><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#21-简介">2.1 简介</a><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#22-DStream">2.2 DStream</a><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#23-Spark--Storm--Flink">2.3 Spark & Storm & Flink</a><br/>
</nav>
## 一、流处理
### 1.1 静态数据处理
在流处理之前数据通常存储在数据库文件系统或其他形式的存储系统中。应用程序根据需要查询数据或计算数据。这就是传统的静态数据处理架构。Hadoop采用HDFS进行数据存储采用MapReduce进行数据查询或分析这就是典型的静态数据处理架构。
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/01_data_at_rest_infrastructure.png"/> </div>
### 1.2 流处理
而流处理则是直接对运动中的数据的处理,在接收数据时直接计算数据。
大多数数据都是连续的流:传感器事件,网站上的用户活动,金融交易等等 ,所有这些数据都是随着时间的推移而创建的。
接收和发送数据流并执行应用程序或分析逻辑的系统称为**流处理器**。流处理器的基本职责是确保数据有效流动同时具备可扩展性和容错能力Storm和Flink就是其代表性的实现。
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/02_stream_processing_infrastructure.png"/> </div>
流处理带来了静态数据处理所不具备的众多优点:
- **应用程序立即对数据做出反应**:降低了数据的滞后性,使得数据更具有时效性,更能反映对未来的预期;
- **流处理可以处理更大的数据量**:直接处理数据流,并且只保留数据中有意义的子集,并将其传送到下一个处理单元,逐级过滤数据,降低需要处理的数据量,从而能够承受更大的数据量;
- **流处理更贴近现实的数据模型**:在实际的环境中,一切数据都是持续变化的,要想能够通过过去的数据推断未来的趋势,必须保证数据的不断输入和模型的不断修正,典型的就是金融市场、股票市场,流处理能更好的应对这些数据的连续性的特征和及时性的需求;
- **流处理分散和分离基础设施**:流式处理减少了对大型数据库的需求。相反,每个流处理程序通过流处理框架维护了自己的数据和状态,这使得流处理程序更适合微服务架构。
## 二、Spark Streaming
### 2.1 简介
Spark Streaming是Spark的一个子模块用于快速构建可扩展高吞吐量高容错的流处理程序。具有以下特点
+ 通过高级API构建应用程序简单易用
+ 支持多种语言如JavaScala和Python
+ 良好的容错性Spark Streaming支持快速从失败中恢复丢失的操作状态
+ 能够和Spark其他模块无缝集成将流处理与批处理完美结合
+ Spark Streaming可以从HDFSFlumeKafkaTwitter和ZeroMQ读取数据也支持自定义数据源。
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/spark-streaming-arch.png"/> </div>
### 2.2 DStream
Spark Streaming提供称为离散流(DStream)的高级抽象,用于表示连续的数据流。 DStream可以从来自KafkaFlume和Kinesis等数据源的输入数据流创建也可以由其他DStream转化而来。**在内部DStream表示为一系列RDD**。
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/spark-streaming-flow.png"/> </div>
### 2.3 Spark & Storm & Flink
storm和Flink都是真正意义上的流计算框架但 Spark Streaming 只是将数据流进行极小粒度的拆分,拆分为多个批处理,使得其能够得到接近于流处理的效果,但其本质上还是批处理(或微批处理)。
## 参考资料
[Spark Streaming Programming Guide](https://spark.apache.org/docs/latest/streaming-programming-guide.html)

View File

@ -35,7 +35,7 @@ Hadoop采用HDFS存储数据采用MapReduce处理数据。MapReduce主要是
#### 1.3 Storm 与 Spark Streaming对比
严格意义上说Spark Streaming并不是实时计算框架。 Spark Streaming接收实时输入的数据流并将数据拆分为批处理由Spark引擎处理后批量生成结果流。只不过 Spark Streaming 能够将数据流按秒级进行拆分,使得其能够得到接近于流处理的效果,但其本质上还是批处理(或微批处理)。
Spark Streaming并不是真正意义上的流处理框架。 Spark Streaming接收实时输入的数据流并将数据拆分为批处理由Spark引擎处理后批量生成结果流。只不过 Spark Streaming 能够将数据流进行极小粒度的拆分,使得其能够得到接近于流处理的效果,但其本质上还是批处理(或微批处理)。
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/streaming-flow.png"/> </div>
@ -46,9 +46,9 @@ storm和Flink都是真正意义上的实时计算框架。其对比如下
| | storm | flink |
| -------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| 状态管理 | 无状态 | 有状态 |
| 窗口支持 | 对事件窗口支持较弱,缓存整个窗口的所有数据,窗口结束时一起计算 | 窗口支持较为完善,自带一些窗口聚合方法,并且会自动管理窗口状态 |
| 消息投递 | At Least Once | Exactly Once |
| 容错方式 | ACK机制对每个消息进行全链路跟踪失败或者超时时候进行重发 | 检查点机制:通过分布式一致性快照机制,对数据流和算子状态进行保存。在发生错误时,使系统能够进行回滚。 |
| 窗口支持 | 对事件窗口支持较弱,缓存整个窗口的所有数据,窗口结束时一起计算 | 窗口支持较为完善,自带一些窗口聚合方法,<br>并且会自动管理窗口状态 |
| 消息投递 | At Most Once<br/>At Least Once | At Most Once<br/>At Least Once<br/>**Exactly Once** |
| 容错方式 | ACK机制对每个消息进行全链路跟踪失败或者超时时候进行重发 | 检查点机制:通过分布式一致性快照机制,<br/>对数据流和算子状态进行保存。在发生错误时,使系统能够进行回滚。 |
> 注 : 一般来说,对于消息投递,一般有以下三种方案:

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB