Spark StructStreaming Batch mode和Continuous mode

Spark StructStreaming Batch mode和Continuous mode

上一节我们介绍了 Structured Streaming,并学习了流处理开发三要素,也就是 Source、流处理引擎与 Sink。

image-20240806100307434

让我们把目光集中到 Structured Streaming,也就是流处理引擎本身。Structured Streaming 与 Spark MLlib 并列,是 Spark 重要的子框架之一。值得一提的是,Structured Streaming 天然能够享受 Spark SQL 提供的处理能力与执行性能,同时也能与其他子框架无缝衔接。因此,基于 Structured Streaming 这个新一代框架开发的流处理应用,天然具备优良的执行性能与良好的扩展性。

知己知彼,百战百胜。想要灵活应对不同的实时计算需求,我们就要先了解 Structured Streaming 的计算模型长啥样,搞清楚它如何应对容错、保持数据一致性。我们先从计算模型说起。

计算模型

当数据像水流一样,源源不断地流进 Structured Streaming 引擎的时候**,引擎并不会自动地依次消费并处理这些数据,它需要一种叫做 Trigger 的机制,来触发数据在引擎中的计算**。

换句话说,Trigger 机制,决定了引擎在什么时候、以怎样的方式和频率去处理接收到的数据流。Structured Streaming 支持 4 种 Trigger,如下表所示。

image-20211218133604129

要为流处理设置 Trigger,我们只需基于 writeStream API,调用 trigger 函数即可。Trigger 的种类比较多,一下子深入细节,容易让你难以把握重点,所以现在你只需要知道 Structured Streaming 支持种类繁多的 Trigger 即可。

我们先把注意力,放在计算模型上面。对于流数据,Structured Streaming 支持两种计算模型,分别是 Batch mode 和 Continuous mode。所谓计算模型,本质上,它要解决的问题,就是 Spark 以怎样的方式,来对待并处理流数据

这是什么意思呢?没有对比就没有鉴别,咱们不妨通过对比讲解 Batch mode 和 Continuous mode,来深入理解计算模型的含义。

Batch mode

我们先来说说 Batch mode,所谓 Batch mode,它指的是 Spark 将连续的数据流,切割为离散的数据微批(Micro-batch),也即小份的数据集

形象一点说,Batch mode 就像是“抽刀断水”,两刀之间的水量,就是一个 Micro-batch。而每一份 Micro-batch,都会触发一个 Spark Job,每一个 Job 会包含若干个 Tasks。学习过基础知识与 Spark SQL 模块之后,我们知道,这些 Tasks 最终会交由 Spark SQL 与 Spark Core 去做优化与执行。

image-20211218213139033

在这样的计算模型下,不同种类的 Trigger

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spark BatchSpark Streaming是Apache Spark库中用于处理数据流的两种主要模式,它们在代码实现上有着显著的不同。 **Spark Batch:** - 在Spark Batch中,数据被看作是一次性的批处理(batch),通常是从文件系统、数据库或外部源一次性读取到内存中。 - 主要的API是`DataFrame`和`RDD(Resilient Distributed Dataset)`。数据处理流程包括数据加载、转换、聚合等操作,然后最终写回磁盘或数据库。 - 由于数据是静态的,所以不需要处理实时变化,因此代码编写时可以按照传统的批量处理思路进行,无需考虑时间窗口或持续流处理。 **Spark Streaming:** - Spark Streaming则是针对实时或近实时数据流的处理。它将连续的数据流划分为一系列小的时间窗口(如秒、分钟或更短),并在每个窗口内执行批处理操作。 - 主要API是`DStream`(Discretized Stream),它是`DataFrame`或`RDD`在时间维度上的扩展。代码通常会涉及到时间滑动窗口的设置和流处理逻辑。 - 数据处理过程中,需要关注数据的实时性,可能需要实时更新状态或执行实时分析。 **代码层面的区别:** - 在`SparkSession`创建时,`SparkBatch`使用`spark.read()`读取数据,而`SparkStreaming`则用`spark.readStream()`。 - `SparkStreaming`会创建`DStream`实例并定义`transform`函数处理每个时间窗口的数据,而`SparkBatch`直接操作`DataFrame`或`RDD`。 - Spark Streaming代码中,可能会用到`foreachRDD`、`transformWith`等特定于流处理的函数,而Batch模式下的代码结构更为简单。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值