Spark 流(Streaming)介绍

1. 目的

本章将学习Spark Streaming的基础知识,Spark Streaming术语介绍,Streaming如何工作,Spark Streaming操作。

2. 什么是Spark Streaming

流数据是连续到达的无限序列数据。Spark Streaming按照时间片将输入数据不断地分成独立单元进行进一步处理。流处理是对流数据的低延迟处理和分析。

Spark Streaming是Spark Core的扩展,在2013年被添加到Spark中,它为实时数据流提供了可扩展的高吞吐量和容错处理。可以从Kafka,Apache Flume,Amazon Kinesis或TCP套接字等许多来源获得数据,并且可以使用复杂的转换操作完成处理,如map、reduce、join、window,处理过的数据可以输出到文件系统、数据库、实时仪表板。

3. 为什么使用Spark Streaming

像Apache Hadoop这样的批处理系统具有很高的延迟,不适合接近实时处理的需求。在Storm中,记录的处理由Storm保证,如果记录没有被处理,可能导致不一致,因为存在重复处理记录的可能。如果运行Storm的节点出现故障,状态将会丢失。在大多数环境中,Hadoop用于批处理,而Storm用于流处理,导致增加开发工作量,增加学习曲线,增加代码和需要修复的错误数量,以及导致的其他问题。

Spark Streaming有助于解决这些问题,并提供可扩展,高效,弹性的系统。Spark Streaming迅速采用的主要原因是统一了不同的数据处理能力。这使得开发人员可以轻松使用单个框架来满足所有处理需求,例如:来自流数据源的数据可以与存储大量数据的静态数据源相结合(通过Spark SQL)。

4. Spark Streaming术语介绍

1)离散流(Discretized Stream)或DStream:这是Spark Streaming对内部持续的实时数据流的抽象描述,即我们处理的一个实时数据流,在Spark Streaming中对应于一个DStream 实例。

2)批数据(Batch Data):将实时流数据以时间片为单位进行分批,将流处理转化为时间片数据的批处理。随着持续时间的推移,这些处理结果就形成了对应的结果数据流了。

3)时间片或批处理时间间隔(Batch Interval):这是人为地对流数据进行定量的标准,以时间片作为我们拆分流数据的依据。一个时间片的数据对应一个RDD实例。

4)窗口长度(Window Length):一个窗口覆盖的流数据的时间长度。必须是批处理时间间隔的倍数。

5)滑动时间间隔:前一个窗口到后一个窗口所经过的时间长度。必须是批处理时间间隔的倍数,默认等于批处理时间间隔。

6)Input DStream:一个Input DStream是一个特殊的DStream,将Spark Streaming连接到一个外部数据源来读取数据。

5. Spark Streaming如何工作

Spark Streaming的核心思想是把流式处理转化为“微批处理”,即以时间为单位切分数据流,每个切片内的数据对应一个RDD,进而可以采用Spark引擎进行快速计算。

DStream基于Spark的RDD,它可与任何其他Spark组件(如Spark SQL、Spark MLlib)无缝集成。

Spark Streaming提供Scala、Java和Python API。

6. Spark Streaming操作

Spark Streaming支持两种类型的操作。

 6.1 转换操作 

与Spark RDD类似,Streaming转换允许修改输入DStream中的数据,DStream支持Spark RDD上的许多转换,转换操作是延迟执行。

常见的转换操作如下:

map(), flatMap(), filter(), repartition(numPartitions), union(otherStream), count(), reduce(), countByValue(), reduceByKey(func, [numTasks]), join(otherStream, [numTasks]), cogroup(otherStream, [numTasks]), transform(), updateStateByKey(), Window() 

 6.2 输出操作 

 DStream的数据被输出到外部系统,如数据库或文件系统。输出操作会触发所有DStream转换的执行。

常见的输出操作如下:

Print(), saveAsTextFiles(prefix, [suffix]), saveAsObjectFiles(prefix, [suffix]), saveAsHadoopFiles(prefix, [suffix]), foreachRDD(func)

 

Spark 流(Streaming)介绍

发表评论

电子邮件地址不会被公开。 必填项已用*标注

÷ 一 = 七