Spark Structured Streaming和DStreams有什么区别?

时间:2018-03-15 02:16:12

标签: apache-spark spark-streaming

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

2 个答案:

答案 0 :(得分:3)

在Spark 2.2之前,DStream[T]是流数据的抽象数据类型,可以被视为RDD[RDD[T]]。从Spark 2.2开始,DataSet是{{1}的抽象。它既包含批处理(冷),也包含流数据。

来自文档

  

Discretized Streams(DStreams)Discretized Stream或DStream就是   Spark Streaming提供的基本抽象。它代表了一个   连续的数据流,或者是从中接收的输入数据流   源,或通过转换生成的已处理数据流   输入流。在内部,DStream由连续表示   一系列RDD,这是Spark对不可变的抽象,   分布式数据集(有关详细信息,请参阅Spark编程指南)。   DStream中的每个RDD包含来自特定间隔的数据,如图所示   在下图中。

     

API使用数据集和DataFrames自Spark 2.0,DataFrames和   数据集可以表示静态,有界数据以及流式传输,   无限数据。与静态数据集/数据框类似,您可以使用   常见的入口点SparkSession(Scala / Java / Python / R docs)来创建   从流媒体源流式传输DataFrames / Datasets,并应用   与静态DataFrames / Datasets相同的操作。如果你不是   熟悉数据集/数据框架,强烈建议您使用   使用DataFrame / Dataset Programming熟悉它们   指南。

答案 1 :(得分:0)

有关Spark Streaming(RDD / DStream)和Spark结构化Streaming(Dataset / DataFrame)的简要说明

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

困难-构建支持交付策略的流传输管道并不容易:只需保证一次,就可以处理迟到或容错的数据到达。当然,它们都是可以实现的,但是它们需要程序员的一些额外工作。

不相容-用于生成批处理(RDD,数据集)的API与流处理(DStream)的API不同。当然,没有什么可阻止代码编写的,但是至少处理抽象总是比较简单的(尤其是维护成本)。

请参见example

火花流流程图:- Spark Streaming flow diagram

火花结构化流应理解为无限制的表,随着新的传入数据而增长,即可以认为是基于Spark SQL构建的流处理。

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

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

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

sink,结果表,输出模式和水印是spark结构化流的其他功能。

请参见example

火花结构化流流程图:-

enter image description here