zoukankan      html  css  js  c++  java
  • 浅谈Spark2.x中的Structured Streaming

    在Spark2.x中,Spark Streaming获得了比较全面的升级,称为Structured Streaming,和之前的很不同,功能更强大,效率更高,跟其他的组件整合性也更好。

    连续应用程序continuous application

    首先,也是最重要的,在2.x中,提出了一个叫做continuous applications连续应用程序的概念。
    如下图所示,数据从Kafka中流进来,通过ETL操作进行数据清洗,清洗出来作为目标数据进行进一步处理,可能是机器学习,也可能是交互式查询,也有可能直接把数据存在数据库或者其他外部存储设备,也有可能是直接交给已有的应用程序。也就是说SparkStreaming从获得数据后,能把全部处理环节串联起来,称之为端到端(End to end)处理!!!
    Snip20160618_15
    举个例子:如果要将货物进行海运,大致会下面这些阶段:
    货物从仓库运出-->出来之后装上车-->到车开动-->车在马路上行驶-->到了码头停下来-->货物从车上卸下来-->从陆地上弄到船上。
    这些阶段一环扣一环,每一环都有责任,都会有风险。
    continuous application的模型就与这个类似,在充分应对风险的前提下,可以串联业务的全部过程!!!

    无边界表unbounded table

    对Spark Streaming来说,Continuous还有另一层含义,即运行在Dataset和DataFrame之上。
    基本观点是把数据看成一张表,默认情况下DataSet和Dataframe中的表是有边界的,而在流处理中是无边界的。对于Spark Streaming来说,是将数据抽象为了一个没有边界的表!!!

    这个做法有一个非常大的好处,我们知道,目前SparkStreaming是直接依赖RDD,优化需要自己完成,使用Dataset和DataFrame就可以利用Tungsten引擎来进行优化。把Tungsten等优化技术轻而易举的应用起来,可以说是在技术的运用上促进化学反应的发生。

    Snip20160618_20

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

    Snip20160618_21

    增量输出模式delta output

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

    Snip20160618_19

    API简化

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

    Snip20160618_18

    其他改进

    2.x同时也解决了DStream的很多问题。

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

    Snip20160618_16

    小结

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

  • 相关阅读:
    组合容斥计数技巧
    [BZOJ3456]城市规划:DP+NTT+多项式求逆
    [BZOJ4456][ZJOI2016]旅行者:分治+最短路
    [51nod1383&1048]整数分解为2的幂:DP
    [BZO3572][HNOI2014]世界树:虚树+倍增
    树上最小权链覆盖:可并堆
    [BZOJ4237]稻草人:CDQ分治+单调栈
    [BZOJ3453]tyvj 1858 XLkxc:拉格朗日插值
    [BZOJ5463][APIO2018]铁人两项:Tarjan+圆方树
    [BZOJ4695]最假女选手:segment tree beats!
  • 原文地址:https://www.cnblogs.com/itboys/p/8024730.html
Copyright © 2011-2022 走看看