我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Spark Streaming vs. Structured Streaming

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Spark Streaming vs. Structured Streaming

简介

Spark Streaming

Spark Streaming是spark最初的流处理框架,使用了微批的形式来进行流处理。

提供了基于RDDs的Dstream API,每个时间间隔内的数据为一个RDD,源源不断对RDD进行处理来实现流计算

Structured Streaming

Spark 2.X出来的流框架,采用了无界表的概念,流数据相当于往一个表上不断追加行。

基于Spark SQL引擎实现,可以使用大多数Spark SQL的function

区别

1. 流模型

Spark Streaming

在这里插入图片描述
Spark Streaming采用微批的处理方法。每一个批处理间隔的为一个批,也就是一个RDD,我们对RDD进行操作就可以源源不断的接收、处理数据。

spark streaming微批终是批

Structured Streaming

在这里插入图片描述

Structured Streaming is to treat a live data stream as a table that is being continuously appended

Structured Streaming将实时数据当做被连续追加的表。流上的每一条数据都类似于将一行新数据添加到表中。

在这里插入图片描述

以上图为例,每隔1秒从输入源获取数据到Input Table,并触发Query计算,然后将结果写入Result Table,之后根据指定的Output模式进行写出。

上面的1秒是指定的触发间隔(trigger interval),如果不指定的话,先前数据的处理完成后,系统将立即检查是否有新数据。

需要注意的是,Spark Streaming本身设计就是一批批的以批处理间隔划分RDD;而Structured Streaming中并没有提出批的概念,Structured Streaming按照每个Trigger Interval接收数据到Input Table,将数据处理后再追加到无边界的Result Table中,想要何种方式输出结果取决于指定的模式。所以,虽说Structured Streaming也有类似于Spark Streaming的Interval,其本质概念是不一样的。Structured Streaming更像流模式。

2. RDD vs. DataFrame、DataSet

Spark Streaming中的DStream编程接口是RDD,我们需要对RDD进行处理,处理起来较为费劲且不美观。

stream.foreachRDD(rdd => {
    balabala(rdd)
})

Structured Streaming使用DataFrame、DataSet的编程接口,处理数据时可以使用Spark SQL中提供的方法,数据的转换和输出会变得更加简单。

spark
    .readStream
    .format("kafka")
    .option("kafka.bootstrap.servers", "hadoop01:9092")
    .option("subscribe", "order_data")
    .load()
    .select($"value".cast("string"))
    .as[String]
    .writeStream
    .outputMode("complete")
    .format("console")

3. Process Time vs. Event Time

Process Time:流处理引擎接收到数据的时间

Event Time:时间真正发生的时间

Spark Streaming中由于其微批的概念,会将一段时间内接收的数据放入一个批内,进而对数据进行处理。划分批的时间是Process Time,而不是Event Time,Spark Streaming没有提供对Event Time的支持。

Structured Streaming提供了基于事件时间处理数据的功能,如果数据包含事件的时间戳,就可以基于事件时间进行处理。

这里以窗口计数为例说明一下区别:

我们这里以10分钟为窗口间隔,5分钟为滑动间隔,每隔5分钟统计过去10分钟网站的pv

假设有一些迟到的点击数据,其本身事件时间是12:01,被spark接收到的时间是12:11;在spark streaming的统计中,会毫不犹豫的将它算作是12:05-12:15这个范围内的pv,这显然是不恰当的;在structured streaming中,可以使用事件时间将它划分到12:00-12:10的范围内,这才是我们想要的效果。

4. 可靠性保障

两者在可靠性保证方面都是使用了checkpoint机制。

checkpoint通过设置检查点,将数据保存到文件系统,在出现出故障的时候进行数据恢复。

在spark streaming中,如果我们需要修改流程序的代码,在修改代码重新提交任务时,是不能从checkpoint中恢复数据的(程序就跑不起来),是因为spark不认识修改后的程序了。

在structured streaming中,对于指定的代码修改操作,是不影响修改后从checkpoint中恢复数据的。具体可参见文档。

5. sink

二者的输出数据(写入下游)的方式有很大的不同。

spark streaming中提供了foreachRDD()方法,通过自己编程实现将每个批的数据写出。

stream.foreachRDD(rdd => {
    save(rdd)
})

structured streaming自身提供了一些sink(Console Sink、File Sink、Kafka Sink等),只要通过option配置就可以使用;对于需要自定义的Sink,提供了ForeachWriter的编程接口,实现相关方法就可以完成。

// console sink
val query = res
    .writeStream
    .outputMode("append")
    .format("console")
    .start()

最后

总体来说,structured streaming有更简洁的API、更完善的流功能、更适用于流处理。而spark streaming,更适用于与偏批处理的场景。

在流处理引擎方面,flink最近也很火,值得我们去学习一番。

reference

https://blog.knoldus.com/spark-streaming-vs-structured-streaming/

https://dzone.com/articles/spark-streaming-vs-structured-streaming

https://spark.apache.org/docs/2.0.2/streaming-programming-guide.html

https://spark.apache.org/docs/latest/structured-streaming-programming-guide.html


以上为个人理解,如有不对的地方,欢迎交流指正。

在这里插入图片描述
个人公众号:码农峰,推送最新行业资讯,每周发布原创技术文章,欢迎大家关注。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Spark Streaming vs. Structured Streaming

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Spark Streaming vs. Structured Streaming

简介Spark StreamingSpark Streaming是spark最初的流处理框架,使用了微批的形式来进行流处理。提供了基于RDDs的Dstream API,每个时间间隔内的数据为一个RDD,源源不断对RDD进行处理来实现流计算Structured
Spark Streaming vs. Structured Streaming
2014-10-25

Spark Structured Streaming的特性是什么

本篇文章为大家展示了Spark Structured Streaming的特性是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。下面介绍了Structured Streaming的基本概念,及其在
2023-06-19

大数据Hadoop之——Spark SQL+Spark Streaming

目录一、Spark SQL概述二、SparkSQL版本1)SparkSQL的演变之路2)shark与SparkSQL对比3)SparkSession三、RDD、DataFrames和DataSet1)三者关联关系1)RDD1、核心概念2、RDD简单操作3、RD
大数据Hadoop之——Spark SQL+Spark Streaming
2019-06-08

Spark Streaming的实时词频

(注:运行环境是Ubuntu16, pycharm)1、按时段统计:获取scoket端口传输的数据(英文数据即可,方便分词),统计各个时间段内每个单词出现的次数(每个时间段都分别统计,需要使用的关键的DStream成员函数:flatMap,
2023-01-31

Spark Streaming 编程入门指南

Spark Streaming 是核心Spark API的扩展,可实现实时数据流的可伸缩,高吞吐量,容错流处理。可以从许多数据源(例如Kafka,Flume,Kinesis或TCP sockets)中提取数据,并且可以使用复杂的算法处理数据,这些算法用高级函数
Spark Streaming 编程入门指南
2022-02-15

Structured Streaming怎么使用checkpoint进行故障恢复

本篇文章给大家分享的是有关Structured Streaming怎么使用checkpoint进行故障恢复,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。使用checkpoint
2023-06-19

如何解析spark-streaming中的socketTextStream

本篇文章为大家展示了如何解析spark-streaming中的socketTextStream,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。package hgs.spark.streamingim
2023-06-02

基于Spark Streaming怎样开发OnLineLogAanlysis1

基于Spark Streaming怎样开发OnLineLogAanlysis1,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1.GitHubhttps://github.com
2023-06-03

Spark Streaming+Spark SQL的数据倾斜示例分析

这篇文章将为大家详细讲解有关Spark Streaming+Spark SQL的数据倾斜示例分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.现象 三台机器都有产生executor,每台
2023-06-03

Spark Streaming反压机制是怎么样的

本篇文章为大家展示了Spark Streaming反压机制是怎么样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。背景在默认情况下,Spark Streaming 通过 receivers (或者是
2023-06-19

基于Spark Streaming+Saprk SQL怎么开发OnLineLogAanlysis2

这篇文章将为大家详细讲解有关基于Spark Streaming+Saprk SQL怎么开发OnLineLogAanlysis2,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.influxd
2023-06-03

flink和spark Streaming中Back Pressure的示例分析

这篇文章将为大家详细讲解有关flink和spark Streaming中Back Pressure的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Spark Streaming的back pres
2023-06-19

如何分析基于Spark Streaming Direct方式的WordCount

这期内容当中小编将会给大家带来有关如何分析基于Spark Streaming Direct方式的WordCount,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.前提 a. flume 收集--》flu
2023-06-03

如何进行Spark Streaming框架在 5G 中的应用

本篇文章给大家分享的是有关如何进行Spark Streaming框架在 5G 中的应用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。这次想分享一下我们关于当前流处理引擎及其在
2023-06-19

spark-streaming-kafka怎样通过KafkaUtils.createDirectStream的方式处理数据

spark-streaming-kafka怎样通过KafkaUtils.createDirectStream的方式处理数据,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。pack
2023-06-02

Spark Streaming及其在实时数据处理中的应用

Spark Streaming是Apache Spark提供的一种实时流处理框架,可以对实时数据进行高效的处理和分析。它可以将数据流分成小批处理,然后在集群上进行并行处理,实现实时数据处理和分析。Spark Streaming在实时数据处
Spark Streaming及其在实时数据处理中的应用
2024-03-05

Spark Streaming,Flink,Storm,Kafka Streams,Samza:如何选择流处理框架

根据最新的统计显示,仅在过去的两年中,当今世界上90%的数据都是在新产生的,每天创建2.5万亿字节的数据,并且随着新设备,传感器和技术的出现,数据增长速度可能会进一步加快。从技术上讲,这意味着我们的大数据处理将变得更加复杂且更具挑战性。而且,许多用例(例如,移
Spark Streaming,Flink,Storm,Kafka Streams,Samza:如何选择流处理框架
2017-10-13

周期性清除Spark Streaming流状态的方法是什么

本篇文章为大家展示了周期性清除Spark Streaming流状态的方法是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在Spark Streaming程序中,我们经常需要使用有状态的流来统计一
2023-06-19

Spark Streaming在实际应用场景中的两种计算模型

欢迎各位阅读本篇,数据:在计算机系统中,各种字母、数字符号的组合、语音、图形、图像等统称为数据,数据经过加工后就成为信息。本篇文章讲述了Spark Streaming场景应用&计算模型及监控。
Spark Streaming在实际应用场景中的两种计算模型
2024-04-23

编程热搜

目录