【问题标题】:What is the difference between Spark Structured Streaming and DStreams?Spark 结构化流和 DStream 有什么区别?
【发布时间】:2019-03-10 14:22:26
【问题描述】:

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

【问题讨论】:

    标签: apache-spark spark-streaming


    【解决方案1】:

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

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

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

    Incosistent - 用于生成批处理的 API(RDD、Dataset)与流处理的 API(DStream)不同。当然,代码没有什么阻碍,但至少处理抽象总是更简单(尤其是维护成本)。

    example

    Spark Streaming 流程图:-

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

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

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

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

    sink、Result Table、输出模式和watermark是spark结构化流的其他特性。

    example

    Spark Structured Streaming 流程图:-

    【讨论】:

      【解决方案2】:

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

      来自文档

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-17
        • 2019-07-24
        • 1970-01-01
        • 2019-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多