0%

spark Streaming简介

spark Streaming简介

spark Streaming是spark想要在流式处理中占据一席之地开发出来的产物,其底层还是使用的spark core,所以spark streaming做不到实时数据处理(毫秒级别),只能做到准实时(秒/分钟级别),且由于spark的架构如果是一个个的进行处理会导致资源的闲置和浪费,所以采用的是微批次的数据处理(微批次是为了可以准实时的进行处理,如果批量过大,回导致运算时间过长,变成离线处理)。

而为了可以实现准实时、微批量,spark streaming使用离散化流(discretized stream)作为抽象表示,叫作 DStream。DStream 是随时间推移而收到的数据的序列。在内部,每个时间区间收到的数据都作为 RDD 存在,而 DStream 是由这些 RDD 所组成的序列(因此得名“离散化”),DStream 就是对 RDD 在实时数据处理场景的一种封装

Spark Streaming 支持的数据输入源很多,例如:Kafka、Flume、Twitter、ZeroMQ 和简单的 TCP 套接字等等。数据输入后可以用 Spark 的高度抽象原语如:map、reduce、join、window 等进行运算。DStream支持两种操作,一种是转换操作,会生成一个新的SDtream;一种是输出操作,可以把数据写入到外部系统,如 HDFS,数据库等。

核心类

Spark Streaming的依赖

1
2
3
4
5
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_2.12</artifactId>
<version>3.1.1</version>
</dependency>

StreamingContext是Spark Streaming的主要入口,会从底层创建SparkContext用来处理数据

1
2
// 第二个参数用来指定多长时间处理一次新数据的批次间隔
val streamingContext = new StreamingContext(sparkConf, Seconds(3))

调用start方法启动采集器,这样才可以把Spark作业交给SparkContext去调度执行,执行是在另一个线程中执行的,所以需要使用awaitTermination方法来阻塞主线程来等待流计算完成,防止应用退出

1
2
3
4
5
// 启动采集器
streamingContext.start()

// 等待采集器停止
streamingContext.awaitTermination()