Spark Structured Streaming 和 DStreams 有什么区别?

Sun*_*yAk 8 apache-spark spark-streaming

我一直在尝试在线查找材料 - 两者都是基于微批次的 - 那么有什么区别?

Roh*_*dav 7

Spark Streaming(RDD/DStream) 和 Spark Structured Streaming(Dataset/DataFrame) 简要说明

\n\n

Spark Streaming基于DStream。DStream 由一系列连续的 RDD 表示,它是 Spark\xe2\x80\x99s 对不可变的分布式数据集的抽象。Spark Streaming存在以下问题。

\n\n

困难 - 构建支持交付策略的流式管道并不简单:一次性保证、处理延迟到达的数据或容错。当然,所有这些都是可以实现的,但是它们需要程序员做一些额外的工作。

\n\n

不一致 - 用于生成批处理(RDD、数据集)的 API 与流处理(DStream)的 API 不同。当然,对代码没有任何阻碍,但至少尽可能地处理抽象总是更简单(尤其是维护成本)。

\n\n

例子

\n\n

Spark Streaming 流程图:-\nSpark Streaming流程图

\n\n

Spark Structured Streaming可以理解为一个无界表,随着新传入的数据而增长,即可以被认为是构建在Spark SQL上的流处理。

\n\n

更具体地说,结构化流为 Spark 带来了一些新概念。

\n\n

一次性保证 - 结构化流媒体专注于这个概念。这意味着数据仅处理一次并且输出不包含重复项。

\n\n

事件时间 - DStream 流处理观察到的问题之一是处理顺序,即先生成的数据在后生成的数据之后处理的情况。结构化流通过称为事件时间的概念来处理此问题,在某些情况下,该概念允许正确聚合处理管道中的后期数据。

\n\n

接收器、结果表、输出模式和水印是 Spark 结构化流的其他功能。

\n\n

例子

\n\n

Spark 结构化流流程图:-

\n\n

在此输入图像描述

\n


Pav*_*ran 5

在 Spark 2.2 之前, 是DStream[T]流数据的抽象数据类型,可以将其视为 。RDD[RDD[T]]从 Spark 2.2 开始, 是体现批处理(冷)数据和流数据的DataSet抽象。DataFrame

\n\n

来自文档

\n\n
\n

离散流 (DStream) 离散流或 DStream 是 Spark Streaming 提供的基本抽象。它表示连续的数据流,可以是从源接收的输入数据流,也可以是通过转换输入流生成的处理后的数据流。在内部,DStream 由一系列连续的 RDD 表示,这是 Spark\xe2\x80\x99 对不可变的分布式数据集的抽象\n(有关更多详细信息,请参阅 Spark 编程指南)。\n DStream 中的每个 RDD包含某个区间的数据,如下图所示。

\n\n

使用数据集和数据帧的 API 自 Spark 2.0 起,数据帧和数据集可以表示静态、有界数据,以及流式、无界数据。与静态数据集/数据帧类似,您可以使用通用入口点 SparkSession(Scala/Java/Python/R 文档)从流源创建流数据帧/数据集,并对它们应用与静态相同的操作数据框/数据集。如果您不熟悉数据集/数据帧,强烈建议您使用数据帧/数据集编程指南来熟悉它们。

\n
\n