概述
结构化流是构建在Spark SQL引擎上的可伸缩和容错的流处理引擎,你可以用处理静态数据相同的方式来进行流式数据的批量计算,Spark SQL引擎随着流数据不断的到达增量地,持续不断的更新最终结果。你可以在Scala、Java、Python或R中的使用 Dataset/DataFrame API来进行流数据的聚合、基于事件时间的窗口计算、连表操作(join)等等。所有的计算都是在同一个优化过的Spark SQL引擎上执行的。最后,系统通过checkpointing 以及 Write-Ahead Logs来确保端到端精确一次的容错保证。简而言之,结构化的流引擎提供了快速、可伸缩、容错、无需用户处理的端到端精确一次的流式计算。
在内部默认情况下使用微批处理引擎来处理结构化流的查询,它将数据流分解为一系列小的批处理作业,从而实现低至100毫秒的端到端延迟和精确的一次容错保证。然而,从Spark 2.3开始,我们引入了一种新的低延迟处理模式,称为Continuous Processing,它可以在at-least-once的保证下实现低至1毫秒的端到端延迟。不需要更改Dataset/DataFrame的运算,你可以根据应用的需求选择使用哪种模式。
在本指南中,我们将带您了解编程模型和APIs。我们主要使用默认的微批处理模型来解释概念,稍后再讨论Continuous Processing模型。首先让我们从一个简单的结构化流式查询示例开始—流式单词计数。
简单示例
假设你想维护从数据服务器通过tcp服务传输过来的文本的字数统计,让我们来看看如何用结构化流来实现这个功能。首先我们需要导入必要的类库然后创建一个本地的SparkSession,它是与spark相关的所有功能的起点。
网友评论