Spark - Spark Streaming使用详解1(基本概念介绍、简单样例)
作者:hangge | 2023-12-03 10:00
一、基本概念介绍
1,Spark Streaming
(1)Spark Streaming 是 Apache Spark 提供的用于实时数据处理的组件。它通过将连续的实时数据流划分为一系列小批次来处理数据。这种离散的批处理操作使得 Spark Streaming 具有与传统的批处理作业相似的编程模型,但它的数据输入源和输出源是实时的。
实时流处理与批处理的区别:
- 在传统的批处理中,数据是一次性加载到系统中,然后在一个固定的时间间隔内进行处理。而在实时流处理中,数据是以连续的方式不断产生并发送到系统中。传统的批处理通常需要等待所有数据都准备好后才能进行处理,而实时流处理是边接收数据边处理的。
- Spark Streaming 通过将实时数据流转化为离散的小批次数据,从而能够利用 Spark 强大的批处理引擎来处理数据。这样既能够兼顾实时性,又能够享受 Spark 引擎带来的高性能和优化。
- 能运行在 100+ 的结点上,并达到秒级延迟。
- 使用基于内存的 Spark 作为执行引擎,具有高效和容错的特性。
- 能集成 Spark 的批处理和交互查询。
- 为实现复杂的算法提供和批处理类似的简单接口。
2,输入与输出
- Spark Streaming 支持的数据输入源很多,例如:Kafka、Flume、Twitter、ZeroMQ 和简单的 TCP 套接字等等。
- 数据输入后可以用 Spark 的高度抽象原语,如:map、reduce、join、window 等进行运算。
- 而结果也能保存在很多地方,如 HDFS,数据库等。
3,DStream
Spark Streaming 的核心概念是 DStream(Discretized Stream),即离散化的数据流。DStream 是一系列连续的 RDD(弹性分布式数据集)组成的序列,每个 RDD 包含一段时间间隔内的数据。Spark Streaming 在内部将数据流分割成一系列小的微批次,然后将每个微批次作为一个 RDD 处理。这样,我们可以通过对 DStream 进行转换操作,来实现实时数据处理和计算。
4,Spark Streaming 架构
附:一个简单的 Spark Streaming 应用程序
1,功能说明
我们使用 netcat 工具向 9999 端口不断的发送数据,而程序通过 SparkStreaming 读取端口数据并统计不同单词出现的次数。
2,代码编写
(1)首先我们编辑项目的 pom.xml 文件,添加 Spark Streaming 依赖:
<dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-streaming_2.13</artifactId> <version>3.4.0</version> </dependency>
(2)具体代码如下:
object Hello { def main(args: Array[String]): Unit = { // 创建 Spark 运行配置对象 val sparkConf = new SparkConf().setMaster("local[*]").setAppName("Hello") // 初始化 StreamingContext,设置微批处理的时间间隔为 3 秒 val ssc = new StreamingContext(sparkConf, Seconds(3)) // 通过监控端口创建 DStream,读进来的数据为一行行 val lineStreams = ssc.socketTextStream("localhost", 9999) // 对 DStream 进行转换操作,将每一行数据做切分,形成一个个单词 val wordStreams = lineStreams.flatMap(_.split(" ")) // 将单词映射成元组(word,1) val wordAndOneStreams = wordStreams.map((_, 1)) // 将相同的单词次数做统计 val wordAndCountStreams = wordAndOneStreams.reduceByKey(_+_) // 打印结果 wordAndCountStreams.print() // 启动 StreamingContext ssc.start() // 等待应用程序终止(遇错停止,否则不断工作) ssc.awaitTermination() } }
3,运行测试
(1)我们通过在终端运行如下命令来启动一个监听本地 9999 端口的 TCP socket:
nc -lk 9999
(2)程序启动后,我们在该终端中输入一些文本数据:
(3)Spark Streaming 应用程序这边将会实时处理输入的文本数据并输出结果:
全部评论(0)