Structured streaming是spark 2.0以后新增的用于实时处理的技术。与spark streaming不同的是,Structured streaming打开了数据源到数据落地之间的限制,它这两个端整合起来,形成真正的“流”,形成一张巨大的表。同时也正因为此特点,真正实现了exactly once语义。

传统的spark streaming处理流程

在spark streaming中可能实现从数据源到计算的"exactly once",但在数据落地的时候,并不能。比如,数据处理完毕,写入redis的过程中,集群崩掉。那么重启后,这部份数据会丢掉或者重复消费。除非自己去实现。而在Structured streaming中都已经得到了较好的实现。

Structured streaming处理流程

话不多说,先来个官网的例子,最直观的感受

 import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.streaming.ProcessingTime object structured{ def main(args: Array[String]) {
val spark = SparkSession
.builder
.appName("StructuredNetworkWordCount")
.master("local")
.getOrCreate() import spark.implicits._ val ds1 = spark
.readStream
.format("kafka")
.option("kafka.bootstrap.servers", "master:9092")
.option("subscribe", "test2")
.load() System.setProperty("hadoop.home.dir", "\\hadoop-common-2.2.0-bin-master")
spark.sparkContext.setCheckpointDir("/chekpoint") val ds2 = ds1.selectExpr("CAST (value as STRING) ").as[String] val words = ds2.as[String].flatMap(_.split(" ")) val wordCounts = words.groupBy("value").count() val query = words
.writeStream
.outputMode("append")
.format("console")
.trigger(ProcessingTime("11 seconds"))
.start() query.awaitTermination()
} }

最直观的可以看到:

1:跟spark streaming不同,Structured streaming已经纳入了spark sql的框架

2:统一了api,以kafka作为消息源为例,原来的KakfaUtils.Dsteam或才directDstream统一变成了read,readStream,输出统一为write,writeStream

3:没有了sparksteramingcontext,计算的启动和等待,任务执行间隔时间设置都变成了由数据启动

需要注意的地方

1:.master("local")

2:System.setProperty("hadoop.home.dir", "e:\\hadoop-common-2.2.0-bin-master")  如果是在windows本地测试,需要设置hadoop本地环境

3:spark.sparkContext.setCheckpointDir("e:/chekpoint")  Structured streaming 目前(2.1.1)支持三种输出模式,除了append以外都需要checkpoint的支持,可是append不支持聚合操作(Append output mode not supported when there are streaming aggregations on streaming DataFrames/DataSets),使用场景实在有限

4:ds1.selectExpr 一定要使用一个dataset去接收

5:定时设置 .trigger(ProcessingTime("10 seconds")) 或者 .trigger(ProcessingTime(10,TimeUnit.SECONDS))

问题

1:没有了sparksteramingcontext,一些sparkconf参数怎么设置。比如说,控制kafka消费速率,

.set("spark.streaming.backpressure.enabled", "true")
     .set("spark.streaming.receiver.maxRate", "3")
     .set("spark.streaming.kafka.maxRatePerPartition", "12")

由spark.sparkContext.getConf.set(key, value)设置?效果如何?有无其它方法?

2:统一了读取消息的api以后,就kafka而言,还有没有低阶和高阶api之分(DStream和DirectDStream)?是否需要自己自己去控制offset?

3:输出模式的异同。append不允许聚合操作,那么使用场景非常有限,意义何在?complete会保留完整的数据(以往各批次),在窗口操作方面较以前的话更有优势,但是时间长了会不会占用非常多的资源?它的内部机制?如何只想得到当次数据,但又要做聚合操作,有没有方法?update是最新(2.1.1)才正式上线的功能。

4:实现exactly once依靠的是 .foreach(new ForeachWriter[Row]一条一条处理来实现的?那么,可以批量写提升效率吗?

未完待续

Structured streaming的更多相关文章

  1. Structured Streaming Programming Guide

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

  2. Spark Streaming揭秘 Day29 深入理解Spark2.x中的Structured Streaming

    Spark Streaming揭秘 Day29 深入理解Spark2.x中的Structured Streaming 在Spark2.x中,Spark Streaming获得了比较全面的升级,称为St ...

  3. Spark Structured streaming框架(1)之基本使用

     Spark Struntured Streaming是Spark 2.1.0版本后新增加的流计算引擎,本博将通过几篇博文详细介绍这个框架.这篇是介绍Spark Structured Streamin ...

  4. Spark Structured Streaming框架(2)之数据输入源详解

    Spark Structured Streaming目前的2.1.0版本只支持输入源:File.kafka和socket. 1. Socket Socket方式是最简单的数据输入源,如Quick ex ...

  5. Structured Streaming从Kafka 0.8中读取数据的问题

    众所周知,Structured Streaming默认支持Kafka 0.10,没有提供针对Kafka 0.8的Connector,但这对高手来说不是事儿,于是有个Hortonworks的邵大牛(前段 ...

  6. Structured Streaming Programming Guide结构化流编程指南

    目录 Overview Quick Example Programming Model Basic Concepts Handling Event-time and Late Data Fault T ...

  7. Spark2.3(四十二):Spark Streaming和Spark Structured Streaming更新broadcast总结(二)

    本次此时是在SPARK2,3 structured streaming下测试,不过这种方案,在spark2.2 structured streaming下应该也可行(请自行测试).以下是我测试结果: ...

  8. Structured Streaming教程(1) —— 基本概念与使用

    近年来,大数据的计算引擎越来越受到关注,spark作为最受欢迎的大数据计算框架,也在不断的学习和完善中.在Spark2.x中,新开放了一个基于DataFrame的无下限的流式处理组件--Structu ...

  9. Structured Streaming教程(2) —— 常用输入与输出

    上篇了解了一些基本的Structured Streaming的概念,知道了Structured Streaming其实是一个无下界的无限递增的DataFrame.基于这个DataFrame,我们可以做 ...

  10. Structured Streaming教程(3) —— 与Kafka的集成

    Structured Streaming最主要的生产环境应用场景就是配合kafka做实时处理,不过在Strucured Streaming中kafka的版本要求相对搞一些,只支持0.10及以上的版本. ...

随机推荐

  1. CentOS之——CentOS7安装iptables防火墙

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/50779761 CentOS7默认的防火墙不是iptables,而是firewall ...

  2. sql server 查看所有表记录数

    SELECT object_name (i.id) TableName, rows as rows FROM sysindexes i INNER JOIN sysObjects o ON (o.id ...

  3. 比较sql server两个数据库

    比较sql server两个数据库 http://opendbdiff.codeplex.com/ http://www.red-gate.com/ 有SQL Compare和SQL Prompt 开 ...

  4. js 只允许输入数字

    <input id="credit" type="text" class="nummber" onkeyup="value= ...

  5. window(win7)下安装ubuntu14.04lts (desktop)系统

    一.前期准备 1.大于2G的U盘一个(我的系统盘制作完成后大约占1个多G的容量) 2.已下载好的Ubuntu安装文件(选择在官网下载,有32和64位选择) 3.已安装好UltraISO软件的电脑(Ul ...

  6. APP-11-视觉技术-通用文字识别

    1.Postman测试 2.参数 https://cloud.baidu.com/doc/OCR/OCR-API.html#.EC.DF.48.27.9B.69.A4.2C.54.1B.DC.95.6 ...

  7. sse 与 socket 摘录-推送常用技术

    推送技术常用的集中实现的实现方式 01.短连接轮询 02.长轮询 03.iframe流: 04.WebSocket 05.Server-sent Events(sse)

  8. delphi dxBarManager 的dxBarEdit 输入问题

    Developer Express 6 想做像office2007那样界面. 问题:dxBarManager1 里面添加了cxBarEditItem1 这是个文本框,运行可以输入内容,但是当焦点失去时 ...

  9. select min from 连接

    预先准备 create table p( name ) ); insert into p values('黄伟福'); insert into p values('赵洪'); insert into ...

  10. avalon2学习教程08插入移除操作

    本节介绍的ms-if指令与ms-visible很相似,都是让某元素"看不见",不同的是ms-visible是通过CSS实现,ms-if是通过移除插入节点实现. ms-if的用法与1 ...