What it is

Spark Streaming类似于Apache Storm,用于流式数据的处理。根据其官方文档介绍,Spark Streaming有高吞吐量和容错能力强等特点。Spark Streaming支持的数据源有很多,例如:Kafka、Flume、Twitter、ZeroMQ和简单的TCP套接字等等。数据输入后可以用Spark的高度抽象操作如:map、reduce、join、window等进行运算。而结果也能保存在很多地方,如HDFS,数据库等。另外Spark Streaming也能和MLlib(机器学习)以及Graphx完美融合。

Spark Streaming原理

Spark Streaming 是基于spark的流式批处理引擎,其基本原理是把输入数据以某一时间间隔批量的处理,当批处理间隔缩短到秒级时,便可以用于处理实时数据流。

计算流程
Spark Streaming是将流式计算分解成一系列短小的批处理作业。这里的批处理引擎是Spark Core也就是把Spark Streaming的输入数据按照batch size(如1秒)分成一段一段的数据(Discretized Stream),每一段数据都转换成Spark中的RDD(Resilient Distributed Dataset),然后将Spark Streaming中对DStream的Transformation操作变为针对Spark中对RDD的Transformation操作,将RDD经过操作变成中间结果保存在内存中。整个流式计算根据业务的需求可以对中间的结果进行缓存或者存储到外部设备。下图显示了Spark Streaming的整个流程。

容错性
对于流式计算来说,容错性至关重要。首先我们要明确一下Spark中RDD的容错机制。每一个RDD都是一个不可变的分布式可重算的数据集,其记录着确定性的操作继承关系(lineage),所以只要输入数据是可容错的,那么任意一个RDD的分区(Partition)出错或不可用,都是可以利用原始输入数据通过转换操作而重新算出的。
对于Spark Streaming来说,其RDD的传承关系如下图所示:

图中的每一个椭圆形表示一个RDD,椭圆形中的每个圆形代表一个RDD中的一个Partition,图中的每一列的多个RDD表示一个DStream(图中有三个DStream),而每一行最后一个RDD则表示每一个Batch Size所产生的中间结果RDD。我们可以看到图中的每一个RDD都是通过lineage相连接的,由于Spark Streaming输入数据可以来自于磁盘,例如HDFS(多份拷贝)或是来自于网络的数据流(Spark Streaming会将网络输入数据的每一个数据流拷贝两份到其他的机器)都能保证容错性,所以RDD中任意的Partition出错,都可以并行地在其他机器上将缺失的Partition计算出来。 这个容错恢复方式比连续计算模型(如Storm)的效率更高。

实时性
Spark Streaming将流式计算分解成多个Spark Job,对于每一段数据的处理都会经过Spark DAG图分解以及Spark的任务集的调度过程。对于目前版本的Spark Streaming而言,其最小的Batch Size的选取在0.5~2秒钟之间(Storm目前最小的延迟是100ms左右),所以Spark Streaming能够满足除对实时性要求非常高(如高频实时交易)之外的所有流式准实时计算场景。

DStream
Discretized Stream是Spark Streaming的基础抽象,代表持续性的数据流和经过各种Spark算子操作后的结果数据流。在内部实现上,DStream是一系列连续的RDD来表示。每个RDD含有一段时间间隔内的数据,如下图:

对数据的操作也是按照RDD为单位来进行的

Spark Streaming使用数据源产生的数据流创建DStream,也可以在已有的DStream上使用一些操作来创建新的DStream。
它的工作流程像下面的图所示一样,接受到实时数据后,给数据分批次,然后传给Spark Engine处理最后生成该批次的结果。

DStream相关操作

DStream上的操作与RDD的类似,分为Transformations(转换)和Output Operations(输出)两种,此外转换操作中还有一些比较特殊的操作,如:updateStateByKey()、transform()以及各种Window相关的操作。

Transformations on DStreams

特殊的Transformations

  1. UpdateStateByKey Operation
    UpdateStateByKey用于记录历史记录,保存上次的状态
  2. Window Operations(开窗函数)
    滑动窗口转换操作:
    滑动窗口转换操作的计算过程如下图所示,我们可以事先设定一个滑动窗口的长度(也就是窗口的持续时间),并且设定滑动窗口的时间间隔(每隔多长时间执行一次计算),然后,就可以让窗口按照指定时间间隔在源DStream上滑动,每次窗口停放的位置上,都会有一部分DStream被框入窗口内,形成一个小段的DStream,这时,就可以启动对这个小段DStream的计算。
  3. 红色的矩形就是一个窗口,窗口框住的是一段时间内的数据流。
  4. 这里面每一个time都是时间单元,在官方的例子中,每隔window size是3 time unit, 而且每隔2个单位时间,窗口会slide一次。
    所以基于窗口的操作,需要指定2个参数:

    • window length - The duration of the window (3 in the figure)
    • slide interval - The interval at which the window-based operation is performed (2 in the figure).
      -.窗口大小,一段时间内数据的容器。
      -.滑动间隔,每隔多久计算一次。

Output Operations on DStreams
Output Operations可以将DStream的数据输出到外部的数据库或文件系统,当某个Output Operations被调用时(与RDD的Action相同),spark streaming程序才会开始真正的计算过程。

【大数据笔记10】SparkStreaming——流式计算相关推荐

  1. 大数据架构中的流式架构和Kappa架构

    关于大数据的架构有很多,比如说传统的大数据架构,当然,还有很多经典的大数据架构,比如说流式架构和Kappa架构.流式架构和Kappa架构在大数据中的应用还是很多的,在这篇文章中我们就给大家介绍一下关于 ...

  2. 大数据_Flink_数据处理_流式数据源测试---Flink工作笔记0010

    前面我们已经写好了,流式数据处理的案例了. 但是我们执行的时候可以看到,我们输入的流,实际上是我们准备的一个文件对吧. 一个Text文件,实际上不算是一个流式数据源 那么正式环境的时候,一般都是,用流 ...

  3. 大数据Hadoop之——新一代流式数据湖平台 Apache Hudi

    文章目录 一.概述 二.Hudi 架构 三.Hudi的表格式 1)Copy on Write(写时复制) 2)Merge On Read(读时合并) 3)COW vs MOR 四.元数据表(Metad ...

  4. 大数据量查询:流式查询与游标查询

    最近在做一个计算相关的功能,大体就是有很多条SQL,每条SQL都涉及复杂地运算,最后要将所有计算结果进行合并分析.经初步测试,每个SQL起码会查出几十万条记录,我们现在有毛毛多的这种SQL. 最大的问 ...

  5. 大数据笔记10:大数据之Hadoop的MapReduce的原理

    1. MapReduce(并行处理的框架) 思想:分而治之,一个大任务分解成多个小的子任务(map),并行执行后,合并结果(Reduce) (1)大任务分解成多个小任务,这个过程就是map: (2)多 ...

  6. 大数据笔记10—java基础篇6(集合1-Collection)

    集合 集合(Collection) 一.迭代器<iterator> 案例一 二.并发修改异常 三.Collection集合 案例一(Collection练习) 案例二(Collection ...

  7. 高大上的介绍实时流式计算!

    实时流式计算,也就是RealTime,Streaming,Analyse,在不同的领域有不同的定义,这里我们说的是大数据领域的实时流式计算. 实时流式计算,或者是实时计算,流式计算,在大数据领域都是差 ...

  8. Flink流式计算从入门到实战 三

    文章目录 四.Flink DataStream API 1.Flink程序的基础运行模型 2.Environment 运行环境 3.Source 3.1 基于File的数据源 3.2 基于Socket ...

  9. Flink流式计算从入门到实战 一

    文章目录 一.理解Flink与流计算 1.初识Flink 2.Flink的适用场景 3.流式计算梳理 二.Flink安装部署 1.Flink的部署方式 2.获取Flink 3.实验环境与前置软件 4. ...

最新文章

  1. maven-assembly-plugin和maven-shade-plugin打包区别及弊端
  2. HDU2044 一只小蜜蜂…(简单递推)
  3. 018_Session
  4. Python实现朴素贝叶斯算法
  5. Linux 编译安装BIND
  6. Linux firewall防火墙详解(二)——firewall配置
  7. SQL SERVER2017 安装程序无法与下载服务器联系。无法安装机器学习服务的问题解决方式...
  8. 中国企业应用软件的几次大战
  9. 新西兰计算机最好大学排名,2017新西兰大学计算机专业排名TOP10经典院校一览
  10. Linux驱动之设备树(设备树下的LED驱动实验)
  11. 【解决办法】解决OneDrive登陆界面空白的方法
  12. 在windows电脑定时运行python脚本
  13. VM VirtualBox6.1在windows 10系统上安装Ubuntu Budgie 19最新版本
  14. SAP资产折旧-工作量法
  15. 一款基于安卓的法语电影字幕听写软件的原型
  16. 使用Vue框架实现NGA客户端
  17. c语言中printf%12d,C语言系列之printf和%12d的用法(三)
  18. 通过 Windows AIK 创建 Windows RE
  19. 【推荐系统】推荐统原理与实战
  20. Spine2D动画系统添加骨骼动画事件帧

热门文章

  1. 知识图谱构建——D2R的使用(二)
  2. 浅谈CSS background参数 属性。
  3. 以友盟+U-Push为例,深度解读消息推送的筛选架构解决方案应用与实践
  4. EJB教程_编程入门自学教程_菜鸟教程-免费教程分享
  5. 苹果退款_苹果充值退款什么意思
  6. 华为云服务权限在哪_华为云资源IAM精细控制权限实践
  7. git push简介
  8. C/C++文件输入输出(详细介绍)
  9. 华师大计算机在线测试,华师大英语B在线测试.doc
  10. Unity技术手册 - 粒子发射和生命周期内速度子模块