Spark Streaming揭秘 Day29 深入理解Spark2.x中的Structured Streaming
Spark Streaming揭秘 Day29
深入理解Spark2.x中的Structured Streaming
在Spark2.x中,Spark Streaming获得了比较全面的升级,称为Structured Streaming,和之前的很不同,功能更强大,效率更高,跟其他的组件整合性也更好。
连续应用程序continuous application
首先,也是最重要的,在2.x中,提出了一个叫做continuous applications连续应用程序的概念。
如下图所示,数据从Kafka中流进来,通过ETL操作进行数据清洗,清洗出来作为目标数据进行进一步处理,可能是机器学习,也可能是交互式查询,也有可能直接把数据存在数据库或者其他外部存储设备,也有可能是直接交给已有的应用程序。也就是说SparkStreaming从获得数据后,能把全部处理环节串联起来,称之为端到端(End to end)处理!!!

举个例子:如果要将货物进行海运,大致会下面这些阶段:
货物从仓库运出-->出来之后装上车-->到车开动-->车在马路上行驶-->到了码头停下来-->货物从车上卸下来-->从陆地上弄到船上。
这些阶段一环扣一环,每一环都有责任,都会有风险。
continuous application的模型就与这个类似,在充分应对风险的前提下,可以串联业务的全部过程!!!
无边界表unbounded table
对SparkStreaming来说,Continuous还有另一层含义,即运行在DataSet和Dataframe之上。
基本观点是把数据看成一张表,默认情况下DataSet和Dataframe中的表是有边界的,而在流处理中是无边界的。对于SparkStreaming来说,是将数据抽象为了一个没有边界的表!!!
这个做法有一个非常大的好处,我们知道,目前SparkStreaming是直接依赖RDD,优化需要自己完成,使用DataSet和Dataframe就可以利用Tungsten引擎来进行优化。把Tungsten等优化技术轻而易举的应用起来,可以说是在技术的运用上促进化学反应的发生。

新加入的Planner就类似路由器,我们在使用时,可以按照时间说明,由planner确定每次读取的位置,在运行时动态绑定位置。在这种模式下,没有数据收集再处理的概念,认为数据一直在那儿,直接拿了处理就行。这可以极大的简化对流处理的理解。

增量输出模式delta output
在2.x中,增加了很多输出模式,delta output是其中的一种最重要的一种。
增量更新,也就是说有需要更新数据的才会更新,其他的不变。Trigger会不断检测输入数据,在不断的进行处理之后,输出结果只更新需要更新的内容,这个更符合我们应用程序的处理场景。

API简化
在API方面,引入和流函数的封装。
这边举个例子:Kafka中读取的数据,通过stream方法形成流,就可以直接与jdbc中读取的数据在DataSet层面就进行Join,不用使用transform或者foreachRDD方法。
stream方法底层依赖Dataset和Dataframe,集成了SparkSql和Dataset几乎所有的功能,把流处理的代码编写一下子简化了很多。

其他改进
2.x同时也解决了DStream的很多问题。
- 增加了eventTime的概念,在原有基于mini batch处理的基础上,学习了Storm基于每个record的事件处理机制。
- serve using JDBC,可以把SparkStreaming抽象成一个数据库,直接通过jdbc访问数据。
- change queries,在运行时可以变更query,并支持多个query并行运行。

小结
从2.x的设计来看,从更根本上,是为了满足更快Faster、完全容错fault-tolerant、完全的语义一致性exactly的要求。
通过实现有状态流处理,让我们的功能更强大。而基于DataSet和Dataframe处理,让我们忘记流的概念,使用将会越来越简单。
欲知后事如何,且听下回分解!
DT大数据每天晚上20:00YY频道现场授课频道68917580
Spark Streaming揭秘 Day29 深入理解Spark2.x中的Structured Streaming的更多相关文章
- 浅谈Spark2.x中的Structured Streaming
在Spark2.x中,Spark Streaming获得了比较全面的升级,称为Structured Streaming,和之前的很不同,功能更强大,效率更高,跟其他的组件整合性也更好. 连续应用程序c ...
- 学习Spark2.0中的Structured Streaming(一)
转载自:http://lxw1234.com/archives/2016/10/772.htm Spark2.0新增了Structured Streaming,它是基于SparkSQL构建的可扩展和容 ...
- Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕
Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕 今天会逐行解析一下SparkStreaming运行的日志,运行的是WordCountO ...
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十六)Structured Streaming中ForeachSink的用法
Structured Streaming默认支持的sink类型有File sink,Foreach sink,Console sink,Memory sink. ForeachWriter实现: 以写 ...
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二十三)Structured Streaming遇到问题:Set(TopicName-0) are gone. Some data may have been missed
事情经过:之前该topic(M_A)已经存在,而且正常使用structured streaming消费了一段时间,后来删除了topic(M_A),重新创建了topic(M-A),程序使用新创建的top ...
- DataFlow编程模型与Spark Structured streaming
流式(streaming)和批量( batch):流式数据,实际上更准确的说法应该是unbounded data(processing),也就是无边界的连续的数据的处理:对应的批量计算,更准确的说法是 ...
- Apache Spark 2.2.0 中文文档 - Structured Streaming 编程指南 | ApacheCN
Structured Streaming 编程指南 概述 快速示例 Programming Model (编程模型) 基本概念 处理 Event-time 和延迟数据 容错语义 API 使用 Data ...
- Spark Streaming vs. Structured Streaming
简介 Spark Streaming Spark Streaming是spark最初的流处理框架,使用了微批的形式来进行流处理. 提供了基于RDDs的Dstream API,每个时间间隔内的数据为一个 ...
- [Spark] 08 - Structured Streaming
基本了解 响应更快,对过去的架构进行了全新的设计和处理. 核心思想:将实时数据流视为一张正在不断添加数据的表. 一.微批处理(默认) 写日志操作 保证一致性. 因为要写入日子操作,每次进行微批处理之前 ...
随机推荐
- Invalidate、RedrawWindow与UpdateWindow
Invalidate.RedrawWindow与UpdateWindow的区别 Invalidate()是强制系统进行重画,但是不一定就马上进行重画.因为Invalidate()只是通知系统,此 时的 ...
- VBA-工程-找不到工程或库-解决方案
近来,越来越多的朋友被“找不到工程或库”的错误所烦恼,所以决定新开一帖来聊聊此问题! QUOTE: 一般情况下,出现此错误是因为找不到引用工程,或找不到与工程语言对应的引用的对象库 出现此类错误可以根 ...
- SSO 登录功能的实现
一.引言 自己早晚都会碰到的问题. 当需要到分离多站点多应用的时候,都是希望用户只要在一个站点登录,其它所有的应用站点都是已登录的状态. 查了下新浪与淘宝的登录的资料,自己实现了一个并做下记录. 二. ...
- Android 高级UI设计笔记03:使用ListView实现左右滑动删除Item
1. 这里就是实现一个很简单的功能,使用ListView实现左右滑动删除Item: (1)当我们在ListView的某个Item,向左滑动显示一个删除按钮,用户点击按钮,即可以删除该项item,并且有 ...
- 如何向Android模拟器打电话发短信
1. 启动Android Emulator, 查看标题栏找出端口.一般是android emulator(5554),其中5554就是端口. 2. 打开命令行,输入telnet localhost 5 ...
- linux 文件夹权限及umask
先创建一个目录,看看权限: $ ll 总用量 drwxrwxr-x huangxm huangxm 2月 : ./ drwxr-xr-x huangxm huangxm 2月 : ../ drwxrw ...
- web_find和web_reg_find的用法和区别
一.web_find()函数 该函数的作用是“在页面中查找相应的内容”,常用参数及含义如下: web_find("web_find", //定义该查找函数的名称 "Rig ...
- Jersey(1.19.1) - Client API, Ease of use and reusing JAX-RS artifacts
Since a resource is represented as a Java type it makes it easy to configure, pass around and inject ...
- HTTP - 首部
首部类型 首部类型 说明 通用首部 客户端和服务器都可以使用的通用首部.可以在客户端.服务器和其他应用程序之间提供一些有用的通用首部. 请求首部 请求首部时请求报文特有的.它们为服务器提供 ...
- 【程序员的SQL金典】笔记(第6章~第11章)
第六章 索引与约束 1.索引用来提高数据的检索速度,而约束则用来保证数据的完整性. 2.创建索引 创建索引的SQL 语句是CREATE INDEX,其语法如下: CREATE INDE ...