Structured Streaming 介绍(一)

最近看了下structured streaming 的基本用法,大部分虽然是翻译官方文档,但是从翻译中也可以加深理解。

基本介绍和编程模型

Spark2.2.0 在7月12号发布,这个版本的Structured Streaming 抛掉了试验的标签,可以正式在生产环境使用。
Structured Streaming 是基于Spark SQL 引擎的流式计算引擎,将流式计算应用于DataFrame.随着数据不断地到达,Spark SQL引擎会以一种增量的方式来执行这些操作,并且持续更新计算结果。其基本概念就是将输入数据流作为
“Input Table”,每次新收到的数据会成为该表新的一行。


Input Table

每次针对数据的查询都会生成一个“Result Table”。每一次的
触发间隔(比如说1s),Input Table 新增的一行,最终都会在Result Table 进行更新。当result table 更新的
时候,我们可能会将改变的数据写入外部存储。

Result Table

Input Source

File source - 以文件流的形式读取目录中写入的文件。 支持的文件格式为text,csv,json,parquet。 有关更多最新列表,可以看下DataStreamReader界面的文档,并支持各种文件格式的选项。 请注意,文件必须是被移动到目录中的,比如用mv命令。
kafka source - 从kafka poll 数据,兼容 kafka broker 0.10.0 或更高版本。更多详情看
Kafka Integration Guide

Socket source (for testing )从socket 连接中读取 UTF8 数据,仅用于测试,不提供容错保证。

某些数据源是不支持容错的,因为它们不能保证在故障之后可以通过checkedpoint offsets 来重新消费数据。

Source Options Fault-tolerant Notes
File path:输入路径,适用所有格式 maxFilesPerTrigger:每次触发时,最大新文件数(默认:无最大) latestFirst:是否首先处理最新的文件,当有大量积压的文件时,有用(默认值:false) fileNameOnly:是否仅根据文件名而不是完整路径检查新文件(默认值:false)。将此设置为“true”,以下文件将被视为相同的文件,因为它们的文件名“dataset.txt”是相同的:· "file:///dataset.txt" "s3://a/dataset.txt" "s3n://a/b/dataset.txt" "s3a://a/b/c/dataset.txt" YES 支持glob路径,但不支持多个逗号分隔的 paths/globs.
socket host port NO ------
kafka 参见Kafka Integration Guide YES ------

三种不同的输出模式

Complete Mode - 更新后的整个Result Table将被写入外部存储。 由外部存储决定如何处理整个表的写入。
Append Mode - 在Result Table中,只有自上次触发后新增到result table中的数据将被写入外部存储。 这仅适用于不期望更改结果表中现有行的查询,也就是说,我们确定,result table中已有的数据是肯定不会被改变的,才使用这种模式。
Update Mode - 只有自上次触发以后在Result Table中更新的数据(包括新增的和修改的)将被写入外部存储(可用于Spark 2.1.1)。 这与完全模式不同,因为此模式仅输出自上次触发以来更改的行。 如果查询不包含聚合,它将等同于Append Mode。

简单例子

object WordCount {
 def main(args: Array[String]): Unit = {
val spark = SparkSession.builder()
        .appName("WordCount")
        .master("local")
        .getOrCreate()
val lines = spark
        .readStream
        .format("socket")
        .option("host", "localhost")
        .option("port", 9999)
        .load()
import spark.implicits._
val words = lines.as[String].flatMap(_.split(" "))
val wordCount=  words .groupBy("value").count()
 //执行此代码后,流式计算将在后台启动。
 //qurey对象是该活动流查询的句柄
  //使用awaitTermination()等待查询的终止.
val qurey = wordCount.writeStream
        .outputMode(OutputMode.Complete())
        .trigger(Trigger.ProcessingTime(2))
        .format("console")
        .start()
qurey.awaitTermination()
   }
 }

lines 为DataFrame是input table,这个表包含了一个名为"value"的列,现在还没有开始收到任何数据,因为我们只是做了transformation操作。 接下来,我们使用.as [String]将DataFrame转换为String数据集,通过flatMap操作将每一行分割成多个单词。 最后,我们通过分组操作生成wordCounts DataFrame。通过start()方法开启流计算。

流数据生成的DataFrame经查询生成wordCounts与静态DataFrame完全相同。 但是,当该查询启动时,Spark将连续检查套接字连接中的新数据。 如果有新数据,Spark将运行一个“增量”查询,将以前的运行计数与新数据相结合,以计算更新的计数,如下所示。


Word Count Example
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容