首页 > 其他分享 >Structured-Streaming初识

Structured-Streaming初识

时间:2024-12-28 12:28:24浏览次数:8  
标签:val 示例 Structured Streaming 初识 Spark 数据

一、概览

Structured Streaming是一个基于SparkSQL引擎构建的可扩展且容错的流处理引擎。可以像在静态数据上表达批量计算一样表达流计算。SparkSQL引擎将负责以增量方式连续运行它,并在流数据继续到达时更新最终结果。可以使用Scala、Java、Python或R中的Dataset/DataFrame API来进行流聚合、事件时间窗口、流到批处理连接等的开发。它基于SparkSQL引擎优化而执行。最后,系统通过 checkpoint 和预写日志确保端到端的精确一次容错保证。简而言之,Structured Streaming提供快速、可扩展、容错、端到端的精确一次流处理,而无需用户对流进行推理。

默认, Structured Streaming使用微批次处理作业引擎进行处理,该引擎将数据流作为一系列小批次作业进行处理,从而实现低至100毫秒的端到端延迟和精确一次的容错保证。自Spark 2.3以来,又引入了一种新的低延迟处理模式,称为连续处理,它可以实现低至1毫秒的端到端延迟,并提供至少保证一次的语义。

二、官方示例

我们还是以从socket接收文本数据进行word count统计来了解它的工作原理。代码如下:

object StructuredNetworkWordCount {
  def main(args: Array[String]): Unit = {
    if (args.length < 2) {
      System.err.println("Usage: StructuredNetworkWordCount <hostname> <port>")
      System.exit(1)
    }

    val host = args(0)
    val port = args(1).toInt

    val spark = SparkSession
      .builder
      .appName("StructuredNetworkWordCount")
      .getOrCreate()

    import spark.implicits._

    // 创建表示从连接到主机端口的输入行流的DataFrame
    val lines = spark.readStream
      .format("socket")
      .option("host", host)
      .option("port", port)
      .load()

    // 将一行文本按空格分割
    val words = lines.as[String].flatMap(_.split(" "))

    // 分组统计
    val wordCounts = words.groupBy("value").count()

    // 启动运行并将结果输出到控制台
    val query = wordCounts.writeStream
      .outputMode("complete")
      .format("console")
      .start()

    query.awaitTermination()
  }
}

可以看到里面用到了spark sql 来进行流式处理,我们看下该官方示例在源码中的位置也就明白了

三、编程模型

Structured Streaming 的关键思想是将实时数据流视为不断追加的表。它是一种类似Spark Streaming(微批处理模型)的新流式处理模型。这使我们可以像查询表一样来处理流式数据。

1、基本概念

将输入数据流视为“输入表”。到达流中的每个数据项就像对输入表做追加操作。每个微小的间隔都会最加到输入表中。

在输入表中进行查询会得到结果表。随着输入表的增加,结果表也会增加或改变。最终将其写入外部系统或输出。

输出模式有以下三种:

  1. Complete模式:将结果表整体写入外部系统
  2. Append模式:只将处理完的当下微批次结果写入外部系统
  3. Update模式:只将处理完的当下微批次且有更新的数据结果写入外部系统

我们用第二部分的示例代码来说明下:

linesDataFrame是输入表

wordCountsDataFrame是结果表

对流式linesDataFrame生成wordCounts的查询与静态DataFrame完全相同。但是,当这个查询启动时,Spark将不断检查来自套接字连接的新数据。如果有新数据,Spark将运行一个“增量”查询,将以前的运行计数与新数据结合起来计算更新的计数,如下所示:

请注意,Structured Streaming 不会物化整个表。它从流数据源中读取最新的可用数据,增量处理以更新结果,然后丢弃源数据。它只保留更新结果所需的最小中间状态数据(例如前面示例中的中间计数)。

2、处理事件时间和延迟数据

从示例中可以发现Structured Streaming 并没有指出每个批次的间隔时间,

因为Structured Streaming 使用的是嵌入在数据本身中的时间。对于许多应用程序,您可能希望对这个事件时间进行操作。例如,如果想获取IoT设备每分钟生成的事件数量,那么可能希望使用数据生成的时间(即数据中的事件时间),而不是Spark接收它们的时间。这个事件时间在这个模型中表达得非常自然,因为把它作为了数据的一部分,也就是表中的一列。

这使得基于窗口的聚合(例如每分钟的事件数量)只是事件时间列上的一种特殊类型的分组和聚合——每个时间窗口是一个组,每行可以属于多个窗口/组。因此,这种event-time-window-based聚合查询可以在静态数据集和数据流上一致定义。

因此,该模型可以处理预期晚到达的数据。由于Spark正在更新结果表,它可以完全控制在有延迟数据时更新旧聚合,以及清理旧聚合以限制中间状态数据的大小。从Spark 2.1开始,我们支持水印,允许用户指定延迟数据的阈值,并允许引擎相应地清理旧状态。

四、运行官方示例

运行Netcat

nc -lk 9999

新建一个窗口运行官方示例

cd /opt/cloudera/parcels/CDH-6.3.1-1.cdh6.3.1.p0.1470567/lib/spark/

bin/run-example sql.streaming.StructuredNetworkWordCount cdh1 9999

 

 他和sparksql一样默认的分区为200个,如果数据量很小,速度非常慢。需要根据数据量来设置自己的分区数。


大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文:
可访问艾思科蓝官网,浏览即将召开的学术会议列表。会议如下:

第四届大数据、信息与计算机网络国际学术会议(BDICN 2025)

第四届电子信息工程、大数据与计算机技术国际学术会议(EIBDCT 2025)

第六届大数据与信息化教育国际学术会议(ICBDIE 2025)

第三届通信网络与机器学习国际学术会议(CNML 2025)

标签:val,示例,Structured,Streaming,初识,Spark,数据
From: https://blog.csdn.net/lu070828/article/details/144547616

相关文章

  • 使用UnstructuredRSTLoader加载RST文件的实战指南
    在大数据时代,爬取和收集网络数据是AI应用中的重要一环。而今天要跟大家分享的是一个非常强大的工具——Spider,它以其快速和高性价比著称,非常适合用于获取适合大型语言模型(LLM)的数据。技术背景介绍Spider是一款专门为AI代理和大型语言模型设计的网络爬虫工具。它最大的特......
  • 【Linux】:初识网络
    ......
  • 第1章 初识Java与面向对象程序设计
    1.1Java概述Java是一门简单的、面向对象的优秀编程语言,它具有跨平台性、可移植性、安全性、健壮性、编译和解释性、高性能和动态性等特点,支持多线程、分布式计算与网络编程等高级特性。1.1.1计算机编程语言发展史历经了三个发展历程:第一代计算机编程语言:机器语言机器语......
  • 第1章 初识Java与面向对象程序设计
    2024021504831.1Java概述1.1.1计算机编程语言发展史历经了三个发展历程:第一代计算机编程语言:机器语言:是微处理器理解和使用的语言,用于控制它的操作二进制代码。第二代计算机编程语言:汇编语言:采用英文单词作为指令来编写程序,这意味着不去记忆那些枯燥的0和1也可以写出一......
  • 初识树形dp
    树形dp什么是树形dp?传统dp的递推过程都是用线性循环,而树形dp的递推过程是采用了树的遍历方式(dfs,bfs)可以应用在树形结构求解最优性问题上没有上司的舞会来自https://www.luogu.com.cn/problem/P1352题目描述某大学有\(n\)个职员,编号为\(1\ldotsn\)。他们之间有从属......
  • 初识Spring WebFlux
    这几天在学习Spring相关的知识,因为市场都在用它,所以不得不学它。当学习到SpringWebFlux这一章节的时候,我总是云里雾里,无法根据书本中的知识在我脑子里形成对于SpringWebFlux的基本面貌。是的,我学了两天,却还没有弄明白,SpringWebFlux到底是什么。可是,我们往往平庸是因为我们......
  • tps25751初识
    TPS25751I2C接口1.1TPS25751有1个I2C目标接口:I2Ct。I2C端口I2Ct由I2Ct_SDA、I2Ct_SCL和I2Ct_IRQ引脚组成。当TPS25751处于“APP”模式时,TI建议使用标准模式或快速模式(即时钟速度不高于400kHz)。但是,在BOOT模式下,当加载补丁包时,可以使用FastmodePlus(参见fSCLS)。TPS2575......
  • 初识C/C++内存结构
    希望本文有助于学习C++的同学们理解C++的内存结构路漫漫,道阻且长。文章目录一、C++的内存结构是什么?二、代码区二、常量存储区三、全局/静态存储区四、栈(Stack)区五、堆区六、各个内存区域之间的联系总结一、C++的内存结构是什么?C/C++不同于其他的语言的其中一......
  • 1、PE 初识
    1、PE初识概论首先PE头部分主要是学习PE结构的前半部分,每一个是做什么的,以及重点是什么,每一个是做什么用的。并使用Cpp代码来解析该PE头注意这里用了一个Windows.h的头文件,后面再说。PE是Windows系统PE结构(PortableExecutable),即可移植可执行文件格式,是Windows操作系统下......
  • 初识C语言——C语言的常见概念(下)
    初识C语言——C语言的常见概念(下)在上一章,我们认识了C语言的概念、历史、使用方法。在对C语言有了初步的了解之后,我们可以来写下我们的第一个C语言程序啦!......