Spark Structured Streaming和DStreams的区别是什么?

ee7vknir  于 2023-10-23  发布在  Apache
关注(0)|答案(2)|浏览(178)

我一直试图在网上寻找材料-两者都是基于微批量的-那么有什么区别呢?

rqqzpn5f

rqqzpn5f1#

Spark Streaming(RDD/DStream)和Spark Structured Streaming(Dataset/DataFrame)简介

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

困难-构建支持交付策略的流媒体管道并不简单:一次保证,处理延迟或容错的数据到达。当然,所有这些都是可实现的,但它们需要程序员的一些额外工作。
不一致-用于生成批处理的API(RDD,Dataset)与流处理的API(DStream)不同。当然,没有代码阻塞,但它总是更简单(维护成本特别高),至少处理尽可能多的抽象。
参见example
Spark Streaming流程图:-x1c 0d1x

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

更具体地说,结构化流为Spark带来了一些新概念。
精确一次保证结构化流集中在这个概念上。它意味着数据只处理一次,输出不包含重复。
事件时间-DStream流的一个观察到的问题是处理顺序,即当较早生成的数据在较晚生成的数据之后被处理时的情况。结构化流使用称为事件时间的概念来处理这个问题,在某些情况下,允许正确地聚合处理管道中的较晚数据。
接收器、结果表、输出模式和水印是Spark结构化流传输其它特征。
参见example
Spark Structured Streaming流程图:-

mfuanj7w

mfuanj7w2#

在Spark 2.2之前,DStream[T]是流数据的抽象数据类型,可以被视为RDD[RDD[T]]。从Spark 2.2开始,DataSetDataFrame的抽象,它既包含批处理(冷)数据,也包含流数据。
从医生那里
离散流(DStreams)离散流(Discretized Stream)或DStream是Spark Streaming提供的基本抽象。它表示一个连续的数据流,无论是从源接收的输入数据流,还是通过转换输入流生成的处理后的数据流。在内部,DStream由一系列连续的RDD表示,这是Spark对不可变的抽象,分布式数据集(详见Spark编程指南)。DStream中的每个RDD都包含一定间隔的数据,如下图所示。
使用数据集和 Dataframe 的API自Spark 2.0以来, Dataframe 和数据集可以表示静态的有界数据,也可以表示流式的无界数据。与静态数据集/ Dataframe 类似,您可以使用公共入口点SparkSession(Scala/Java/Python/R docs)从流源创建流 Dataframe /数据集,并对它们应用与静态DataFrames/Datasets相同的操作。如果您不熟悉Datasets/DataFrames,强烈建议您使用DataFrame/Dataset Programming Guide熟悉它们。

相关问题