通过案例对SparkStreaming 透彻理解三板斧之二:解密SparkStreaming运行机制

通过案例对SparkStreaming 透彻理解三板斧之二:解密SparkStreaming运行机制

一:spark各个子框架的关系:

 上节课我们采用了降维的方式查看了整个spark streaming的大概运行的过程,再次强调,spark streaming 其实是构建在spark core之上的一个应用程序,如果要构建一个强大的spark应用程序 ,spark streaming 是一个值得借鉴的参考,spark streaming涉及多个job交叉配合,里面涉及到了spark的所有的核心组件,如果对spark streaming 精通了的话,可以说就精通了整个spark,所以精通掌握spark streaming是至关重要的

spark 的各个子框架都是基于spark core的。spark streaming在内部的处理机制是接受实时流的数据,并根据一定的时间间隔分成一批一批的数据,然后通过spark engine处理这些批数据,最后得到处理后的一批一批的数据。

对应的批数据,在spark内核对应RDD,在spark streaming中对应DStream ,一个DStream相当于RDD的模板,对应一组RDD(RDD的一个序列)

通俗点理解的话,在数据分成一批一批后,通过一个队列,然后spark引擎从该队列中依次一个一个的取出批数据,把批数据封装成一个DStream,因为DStream是RDD的模板,是RDD的一个逻辑级别的抽象,所以实质上是把数据封装成为物理级别的RDD.

二:Spark Streaming基础概念理解:

为了更好的理解spark streaming,我们先简单的对相关概念理解一下

1 离散流:(Discretized Stream ,DStream):这是spark streaming对内部的持续的实时数据流的抽象描述,也即我们处理的一个实时数据流,在spark streaming中对应一个DStream

2 批数据:将实时流时间以时间为单位进行分批,将数据处理转化为时间片数据的批处理

3 时间片或者批处理时间间隔:逻辑级别的对数据进行定量的标准,以时间片作为拆分流数据的依据。

4 窗口长度:一个窗口覆盖的流数据的时间长度。比如说要每隔5分钟统计过去30分钟的数据,窗口长度为6,因为30分钟是batch interval 的6倍

5 滑动时间间隔:比如说要每隔5分钟统计过去30分钟的数据,窗口时间间隔为5分钟

6 input DStream :一个inputDStream是一个特殊的DStream 将spark streaming连接到一个外部数据源来读取数据。

7 Receiver :长时间(可能7*24小时)运行在Excutor之上,每个Receiver负责一个inuptDStream (比如读取一个kafka消息的输入流)。每个Receiver,加上inputDStream 会占用一个core/slot

重点来了!!!我们用时空维度和空间维度分别对DStream 和RDD来更加深入并且另类的理解spark streaming,以及二者之间的关系。

DStream 对应时空维度,空间加上时间(从目前来看,spark streaming的精妙之一是用时间来解耦合,是目前所见最好的解耦合的方式),RDD对应空间维度,整个sparkStreaming是时空维度。

100756_ipwX_1253652.png

纵轴为空间维度:代表的是RDD的依赖关系构成的具体的处理逻辑的步骤,是用DStream来表示的。

横轴为时间维度:按照特定的时间间隔不断地生成job对象,并在集群上运行。

随着时间的推移,基于DStream Graph 不断生成RDD Graph ,也即DAG的方式生成job,并通过Job Scheduler的线程池的方式提交给spark cluster不断的执行。(sparkStreaming只关注时间维度不关注空间维度)

由上可知,RDD    与  DStream的关系如下:

1.RDD是物理级别的,而 DStream 是逻辑级别的

2.DStream是RDD的封装类,是RDD进一步的抽象

3.DStream 是RDD的模板。DStream要依赖RDD进行具体的数据计算

(注意:纵轴维度需要RDD,DAG的生成模板,需要TimeLine的job控制器

横轴维度(时间维度)包含batch interval,窗口长度,窗口滑动时间等。)

4.inputStream和outputStream分别代表数据的输入和输出

5.具体的job运行在spark cluster之上,此时系统的容错就非常重要,而spark streaimg的容错非常巧妙,它巧妙的借用了spark core rdd的容错而容错。(RDD可以指定StorageLevel来实现存放多个副本用来做容错)

6.事务处理:数据一定会被处理,并且只会对数据处理一次,这个特性对于那些诸如计费系统的实现非常重要

转载于:https://my.oschina.net/u/1253652/blog/668698

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109043.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SMO算法笔记及个人理解

    SMO算法笔记及个人理解SMO算法介绍SMO算法是一种启发式算法,其基本思路是:如果所有变量的解都满足此优化问题的KKT条件,那么这个最优化问题的解就得到了。(KKT条件是该最优化问题的充分必要条件)。否则,选择两个变量,固定其他变量针对这两个变量构建一个二次规划问题。特点:将原始的二次规划问题分解为只含有两个变量的二次规划子问题,对子问题不断求解,使得所有的变量满足KKT条件包含两部分:1、求解两个变量二次规划的解析方法2、选择变量的启发式方法(1)第1个变量的选择:确定在当前的分类器中,违反K.

    2022年6月22日
    33
  • idea 2021.3.4激活码(JetBrains全家桶)[通俗易懂]

    (idea 2021.3.4激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月27日
    421
  • SynchronousQueue详解「建议收藏」

    SynchronousQueue详解「建议收藏」SynchronousQueue是BlockingQueue的一种,所以SynchronousQueue是线程安全的。SynchronousQueue和其他的BlockingQueue不同的是SynchronousQueue的capacity是0。即SynchronousQueue不存储任何元素。也就是说SynchronousQueue的每一次insert操作,必须等待其他线性的remove操作。而每一个remove操作也必须等待其他线程的insert操作。这种特性可以让我们想起了Exchanger

    2022年6月22日
    32
  • Linux上卸载JDK

    Linux上卸载JDK卸载jdk先输入java-version查看是否安装了JDK查看jdk安装的路径whichjava卸载命令rm-rfJDK地址,比如小编的是rm-rf/usr/java/jdk1.8.0_181/进去/usr/java目录查看一下,ls是显示目录下文件,发现确实什么都没有了接下来删除环境变量,装的时候环境变量都是在/etc/profile下面的进入profile,把以下环境变量全给删除vim编辑器汇总,i进入insert模式,然后此环境下可编辑内容,删除之后

    2022年6月25日
    25
  • 对接第三方接口,其中图片是经过Base64加密的「建议收藏」

    对接第三方接口,其中图片是经过Base64加密的「建议收藏」1.简介httppost请求第三方接口,返回图片的信息是经过Base64加密的,如下:<details><summary>点击时的区域标题:点击查看详细内容</summary><p>-测试测试测试</p><pre><code>title,value,callBack可以缺省</code></pre></details><?xmlversion

    2022年6月18日
    19
  • JAVA:定时器的三种方法(详细注解)

    JAVA:定时器的三种方法(详细注解)第一种:创建一个thread,然后让它在while循环里一直运行着,通过sleep方法来达到定时任务的效果,代码如下:publicclassTask1{ publicstaticvoidmain(String[]args){ //runinasecond //每一秒钟执行一次 finallongtimeInterval=10…

    2022年9月18日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号