浅谈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
对Spark Streaming来说,Continuous还有另一层含义,即运行在Dataset和DataFrame之上。
基本观点是把数据看成一张表,默认情况下DataSet和Dataframe中的表是有边界的,而在流处理中是无边界的。对于Spark Streaming来说,是将数据抽象为了一个没有边界的表!!!
这个做法有一个非常大的好处,我们知道,目前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,集成了Spark Sql和Dataset几乎所有的功能,把流处理的代码编写一下子简化了很多。
其他改进
2.x同时也解决了DStream的很多问题。
- 增加了eventTime的概念,在原有基于mini batch处理的基础上,学习了Storm基于每个record的事件处理机制。
- serve using JDBC,可以把Spark Streaming抽象成一个数据库,直接通过jdbc访问数据。
- change queries,在运行时可以变更query,并支持多个query并行运行。
小结
从2.x的设计来看,根本上,是为了满足更快(Faster)、完全容错(fault-tolerant)、完全的语义一致性(exactly)的要求。
通过实现有状态流处理,让我们的功能更强大。而基于Dataset和DataFrame处理,让我们忘记流的概念,使用将会越来越简单。
浅谈Spark2.x中的Structured Streaming的更多相关文章
- Spark Streaming揭秘 Day29 深入理解Spark2.x中的Structured Streaming
Spark Streaming揭秘 Day29 深入理解Spark2.x中的Structured Streaming 在Spark2.x中,Spark Streaming获得了比较全面的升级,称为St ...
- 学习Spark2.0中的Structured Streaming(一)
转载自:http://lxw1234.com/archives/2016/10/772.htm Spark2.0新增了Structured Streaming,它是基于SparkSQL构建的可扩展和容 ...
- 转: 浅谈C/C++中的指针和数组(二)
转自:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242419.html 浅谈C/C++中的指针和数组(二) 前面已经讨论了指针和数组 ...
- 转:浅谈C/C++中的指针和数组(一)
再次读的时候实践了一下代码,结果和原文不一致 error C2372: 'p' : redefinition; different types of indirection 不同类型的间接寻址 /// ...
- 转载 浅谈C/C++中的static和extern关键字
浅谈C/C++中的static和extern关键字 2011-04-21 16:57 海子 博客园 字号:T | T static是C++中常用的修饰符,它被用来控制变量的存贮方式和可见性.ext ...
- 浅谈C语言中的强符号、弱符号、强引用和弱引用
摘自http://www.jb51.net/article/56924.htm 浅谈C语言中的强符号.弱符号.强引用和弱引用 投稿:hebedich 字体:[增加 减小] 类型:转载 时间:2014- ...
- 【sql注入】浅谈sql注入中的Post注入
[sql注入]浅谈sql注入中的Post注入 本文来源:i春秋学院 00x01在许多交流群中,我看见很多朋友对于post注入很是迷茫,曾几何,我也是这样,因为我们都被复杂化了,想的太辅助了所以导致现在 ...
- 浅谈关于QT中Webkit内核浏览器
关于QT中Webkit内核浏览器是本文要介绍的内容,主要是来学习QT中webkit中浏览器的使用.提起WebKit,大家自然而然地想到浏览器.作为浏览器内部的主要构件,WebKit的主要工作是渲染.给 ...
- 浅谈JAVA GUI中,AWT与Swing的区别、联系及优缺点
浅谈JAVA GUI中,AWT与Swing的区别.联系及优缺点 A.区别 1.发布的时间 AWT是在JDK 1.0版本时提出的 Swing是在AWT之后提出的(JAVA 2) 2. ”重量” AWT是 ...
随机推荐
- ssh配置authorized_keys后仍然需要输入密码的问题
前阵子搭建Hadoop时,配置了本机(localhost)的ssh的公钥到authorized_keys文件中,但是在ssh连接localhost时仍然提示需要输入密码,后来发现是$HOME/.ssh ...
- 扩展KMP - HDU 4333 Revolving Digits
Revolving Digits Problem's Link Mean: 给你一个字符串,你可以将该字符串的任意长度后缀截取下来然后接到最前面,让你统计所有新串中有多少种字典序小于.等于.大于原串. ...
- Boosting with Abstention
论文提出了一种loss: x是原始数据,y是对应的label,h(x)是一个判别函数,r(x)相当于训练了一个信心函数,r(x)越大,代表对自己做的判断的信息越大,当r(x)<0的时候,就拒绝进 ...
- adb shell error: more than one device and emulator
adb shell error: more than one device and emulator 本文转载出处: http://blog.sina.com.cn/s/blog_7ffb8dd501 ...
- $ -----JavaScript 中美元符号 $ 的作用
JavaScript 中美元符号 $ 是什么 1.首先可以用来表示变量,比如变量 var s='asdsd'或var $s='asdasd'; 2.在正则表达式中,它可以匹配结尾:/sa$/.test ...
- 【BZOJ】1030: [JSOI2007]文本生成器(递推+ac自动机)
http://www.lydsy.com/JudgeOnline/problem.php?id=1030 其实做了1009也不会感到很难了,无非将kmp变成了ac自动机. 设f[i,j]表示前i个串当 ...
- Myeclipse怎么导入project项目
1,打开Meclipse,在左面的区域点击右键,选择import键. 2,在import面板中选择Exiting Projects into Workbence,点击Next, 3,选择Browse. ...
- MySQL之explain 的type列 & Extra列
explain 可以分析 select 语句的执行,即 MySQL 的“执行计划. 一.type 列 MySQL 在表里找到所需行的方式.包括(由左至右,由最差到最好): | All | inde ...
- VC++ Splash Window封装类CSplash
Splash.h 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 ...
- onbeforeunload 适用DOM 0级,不适用 DOM 2级
你可以在控制台试下: window.addEventListener("beforeunload", function () { return 'ss'; }); 我这里 chro ...