参考:
Spark官方文档
博客https://blog.youkuaiyun.com/u013468917/article/details/79643850?spm=1001.2014.3001.5501
0. SparkSQL与DStream流
在DStream中,我们想要对数据操作进行DataFrame操作和sql语句,必须使用foreachRDD/transform类算子操作DStream中每个RDD,同时通过StreamingContext创建SQLContext,然后将每个RDD转换成DataFrame以临时表格配置并用 SQL 进行查询。例如下:
val spark = SparkSession.builder.config(conf).getOrCreate()
import spark.implicits._
count.foreachRDD(rdd =>{
val df: DataFrame = rdd.toDF("word", "count")
df.createOrReplaceTempView("words")
spark.sql("select * from words").show
})
1. Structured Streaming 概述
从 spark2.0 开始, spark 引入了一套新的流式计算模型: Structured Streaming。该组件进一步降低了处理数据的延迟时间, 它实现了“有且仅有一次(Exectly Once)” 语义, 可以保证数据被精准消费。Structured Streaming 基于 Spark SQl 引擎, 是一个具有弹性和容错的流式处理引擎. 使用 Structure Streaming 处理流式计算的方式和使用批处理计算静态数据(表中的数据)的方式是一样的。随着流数据的持续到达, Spark SQL 引擎持续不断的运行并得到最终的结果. 我们可以使用 Dataset/DataFrame API 来表达流的聚合, 事件-时间窗口(event-time windows), 流-批处理连接(stream-to-batch joins)等等. 这些计算都是运行在被优化过的 Spark SQL 引擎上. 最终, 通过 chekcpoin 和 WALs(Write-Ahead Logs), 系统保证end-to-end exactly-once。
总之, Structured Streaming 提供了快速, 弹性, 容错, end-to-end exactly-once 的流处理, 而用户不需要对流进行推理(比如 spark streaming 中的流的各种转换)。
默认情况下, 在内部, Structured Streaming 查询使用微批处理引擎(micro-batch processing engine)处理, 微批处理

本文深入探讨了Spark Structured Streaming的特性与应用,包括其基于Spark SQL引擎的优势、事件时间处理、延迟数据处理、容错机制及去重方法。文章还对比了DStream与Structured Streaming的差异,详细介绍了Structured Streaming的编程模型、触发机制、以及连续处理模式。
最低0.47元/天 解锁文章
493





