首页 > 其他 > 详细

Structured Streaming

时间:2020-05-03 15:05:40      阅读:64      评论:0      收藏:0      [点我收藏+]

内容来自于林子雨老师的《Spark编程基础》和一些自己的学习笔记。

概述

Structured Streaming是一种基于Spark SQL引擎构建的、可扩展且容错性高的流处理引擎。这里我把它理解为,因为Spark不能处理毫秒级流计算而诞生的流处理引擎。因此Structured Streaming采用的数据抽象是DataFrame而不是DStream。

设计了输入源、执行引擎、和接收器。通过偏移量来跟踪流的读取位置,同时引擎可以使用检查点和预写日志来记录数据的偏移范围,来达到一致性。

关键思想

Structed Streaming的关键思想是将试试数据流视为一张正在不断添加数据的表。流计算等同于在一张静态表上批处理查询,并进行增量查询。

两种处理模型

包括两个处理模型,微批处理模型和持续处理模型,默认是微批处理模型。

微批处理模型,流计算引擎在处理上一批次数据结束后,再对新数据进行批量查询。在下一个微批处理之前,要将数据的偏移范围保存在日志中。所以,当前到达的数据需要在上一批次处理完,同时偏移范围记录到日志后,才能下一个批次数据继续处理,因此会有一定的延迟。书中表示延迟超过100毫秒。

持续处理模型,可以实现毫秒级延迟。启动一系列的连续读取、处理和写入结果任务。对于偏移范围的记录异步写入日志,以达到连续处理,避免高延迟。但这是建立在牺牲一致性为代价上的,低延迟下,会丢失数据。

编写Structured Streaming程序

  • 导入pyspark模块
  • 创建Spark Session对象
  • 创建输入数据源
  • 定义流计算过程
  • 启动流计算并输出结果

输出操作

DataFrame/Dataset的writeStrem()方法返回DataStreamWriter接口,接口启动流计算,并写入外部的输出接收器。不同的接收器存在不同的选项。

示例代码

quert = wordcount
        .writeStream
        .outputMod("update") //输入模式
        .format("console")
        .option() //配置
        .trigger() //触发间隔
        .start()

输出模式

输出模式有Append模式,Complete模式,Update模式。

  • Append模式,结果表中自上次触发间隔后增加的新行,才会被写入外部存储器
  • Complete模式,已更新的完整的结果表可被写入外部存储器
  • Update模式,只有自上次触发间隔后结果表中发生更新的行,才会被写入存储器

输出接收器

内置的输出接收器有File接收器、Kafka接收器、Foreach接收器、Console接收器、Memory接收器。

容错处理

Spark通过将程序划分为输入源、执行引擎和接收器等多个层次来保障容错。

输入源通过偏移量标记,执行引擎通过检查点保存中间结果,接收器使用幂等来保障输出的稳定性。

Structured Streaming

原文:https://www.cnblogs.com/chenshaowei/p/12821884.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!