在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的很多问题。

  1. 增加了eventTime的概念,在原有基于mini batch处理的基础上,学习了Storm基于每个record的事件处理机制。
  2. serve using JDBC,可以把Spark Streaming抽象成一个数据库,直接通过jdbc访问数据。
  3. change queries,在运行时可以变更query,并支持多个query并行运行。

小结

从2.x的设计来看,根本上,是为了满足更快(Faster)、完全容错(fault-tolerant)、完全的语义一致性(exactly)的要求。
通过实现有状态流处理,让我们的功能更强大。而基于Dataset和DataFrame处理,让我们忘记流的概念,使用将会越来越简单。

浅谈Spark2.x中的Structured Streaming的更多相关文章

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

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

  2. 学习Spark2.0中的Structured Streaming(一)

    转载自:http://lxw1234.com/archives/2016/10/772.htm Spark2.0新增了Structured Streaming,它是基于SparkSQL构建的可扩展和容 ...

  3. 转: 浅谈C/C++中的指针和数组(二)

    转自:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242419.html 浅谈C/C++中的指针和数组(二) 前面已经讨论了指针和数组 ...

  4. 转:浅谈C/C++中的指针和数组(一)

    再次读的时候实践了一下代码,结果和原文不一致 error C2372: 'p' : redefinition; different types of indirection 不同类型的间接寻址 /// ...

  5. 转载 浅谈C/C++中的static和extern关键字

    浅谈C/C++中的static和extern关键字 2011-04-21 16:57 海子 博客园 字号:T | T   static是C++中常用的修饰符,它被用来控制变量的存贮方式和可见性.ext ...

  6. 浅谈C语言中的强符号、弱符号、强引用和弱引用

    摘自http://www.jb51.net/article/56924.htm 浅谈C语言中的强符号.弱符号.强引用和弱引用 投稿:hebedich 字体:[增加 减小] 类型:转载 时间:2014- ...

  7. 【sql注入】浅谈sql注入中的Post注入

    [sql注入]浅谈sql注入中的Post注入 本文来源:i春秋学院 00x01在许多交流群中,我看见很多朋友对于post注入很是迷茫,曾几何,我也是这样,因为我们都被复杂化了,想的太辅助了所以导致现在 ...

  8. 浅谈关于QT中Webkit内核浏览器

    关于QT中Webkit内核浏览器是本文要介绍的内容,主要是来学习QT中webkit中浏览器的使用.提起WebKit,大家自然而然地想到浏览器.作为浏览器内部的主要构件,WebKit的主要工作是渲染.给 ...

  9. 浅谈JAVA GUI中,AWT与Swing的区别、联系及优缺点

    浅谈JAVA GUI中,AWT与Swing的区别.联系及优缺点 A.区别 1.发布的时间 AWT是在JDK 1.0版本时提出的 Swing是在AWT之后提出的(JAVA 2) 2. ”重量” AWT是 ...

随机推荐

  1. ssh配置authorized_keys后仍然需要输入密码的问题

    前阵子搭建Hadoop时,配置了本机(localhost)的ssh的公钥到authorized_keys文件中,但是在ssh连接localhost时仍然提示需要输入密码,后来发现是$HOME/.ssh ...

  2. 扩展KMP - HDU 4333 Revolving Digits

    Revolving Digits Problem's Link Mean: 给你一个字符串,你可以将该字符串的任意长度后缀截取下来然后接到最前面,让你统计所有新串中有多少种字典序小于.等于.大于原串. ...

  3. Boosting with Abstention

    论文提出了一种loss: x是原始数据,y是对应的label,h(x)是一个判别函数,r(x)相当于训练了一个信心函数,r(x)越大,代表对自己做的判断的信息越大,当r(x)<0的时候,就拒绝进 ...

  4. 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 ...

  5. $ -----JavaScript 中美元符号 $ 的作用

    JavaScript 中美元符号 $ 是什么 1.首先可以用来表示变量,比如变量 var s='asdsd'或var $s='asdasd'; 2.在正则表达式中,它可以匹配结尾:/sa$/.test ...

  6. 【BZOJ】1030: [JSOI2007]文本生成器(递推+ac自动机)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1030 其实做了1009也不会感到很难了,无非将kmp变成了ac自动机. 设f[i,j]表示前i个串当 ...

  7. Myeclipse怎么导入project项目

    1,打开Meclipse,在左面的区域点击右键,选择import键. 2,在import面板中选择Exiting Projects into Workbence,点击Next, 3,选择Browse. ...

  8. MySQL之explain 的type列 & Extra列

    explain 可以分析 select 语句的执行,即 MySQL 的“执行计划. 一.type 列   MySQL 在表里找到所需行的方式.包括(由左至右,由最差到最好): | All | inde ...

  9. VC++ Splash Window封装类CSplash

    Splash.h 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 ...

  10. onbeforeunload 适用DOM 0级,不适用 DOM 2级

    你可以在控制台试下: window.addEventListener("beforeunload", function () { return 'ss'; }); 我这里 chro ...