Spark版本定制:通过案例对SparkStreaming透彻理解三板斧之二:解密SparkStreaming运行机制和架构

本期内容:

1、解密Spark Streaming运行机制

2、解密Spark Streaming架构

上期回顾:

1、技术界的寻龙点穴,每个领域都有自己的龙脉,Spark就是大数据界的龙脉,Spark Streaming就是Spark的龙血;

2、采用了降维(把时间Batch Interval放大)的方式,进行案例演示实战,得到的结论是:特定的时间内是RDD在执行具体的Job;

一、解密Spark Streaming运行机制和架构

运行机制概念:

      Spark Streaming运行时与其说是Spark Core上的一个流式处理框架,不如说是Spark Core上的一个最复杂的应用程序。如果掌握了Spark streaming这个复杂的应用程序,那么理解其他的spark应用程序都不是问题了,为什么这样说呢?我们看Spark官方网站对Spark Streaming的介绍:

Spark早期的时候只有Spark Core,上面的子框架是一步一步开发出来的,通过上面框架的使用可以洞察出Spark的内部机制,Spark Sql由于涉及了太多的Sql语法细节的解析或优化,不适合作为一个具体的子框架来彻底研究Spark,而Spark R由于功能有限和不成熟,也排除掉,Spark Graphx最近发行的几个版本基本上没有改进,意味着Graphx基本上发展到尽头了,另外图计算有 很多数学计算算法,而Spark ML再封装了Vector(向量)、Matrix(矩阵)以及结合RDD构建了众多的库,ML也有很多的数学知识, 所以最佳的入手点是Spark Streaming.

结合内部运行原理图分析:

上一讲我们说过Spark Core处理的每一步都是基于RDD的,RDD之间有依赖关系。上图中的RDD的DAG显示的是有3个Action,会触发3个job,RDD自下向上依赖,RDD产生job就会具体的执行。

从DSrteam Graph中可以看到,DStream的逻辑与RDD基本一致,DStream就是在RDD的基础上加上了时间维度。而RDD的DAG依赖又可以叫空间维度,所以说整个Spark Streaming就是时空维度。

  从这个角度来讲,可以将Spark Streaming放在坐标系中。其中Y轴就是对RDD的操作,RDD的依赖关系构成了整个job的逻辑,而X轴就是时间。随着时间的流逝,固定的时间间隔(Batch Interval)就会生成一个job实例,进而在集群中运行。

在Spark Streaming中,会不断的有数据流进来,它会不断的把数据积攒起来,积攒的依据是以Batch Interval来积攒的,内部会形成一系列固定不变的数据集或event集合(假如说数据来自flume或者kafka)。我们就能感受Event的存在,Event就是数据,构成了数据的集合,而RDD处理的时候是基于固定不变的数据集合,事实上,DStream基于固定的时间间隔形成的RDD Graph正是基于某一个batch的数据集的。

Spark Streaming重要概念总结: 

        DStream(离散流):是整个Spark Streaming编程的基本单位或者基本对象,所有Spark Streaming都是基于DStream的;

        DStream是RDD的模板;DStream的依赖关系构成了DStream Graph,是RDD DAG的模板,DAG对应的是SDtream Graph,RDD对应的是DStream;

        DStream随着时间的流逝生成一系列的RDD;

        DSTream是逻辑级别的;想象中的不是实际存在的;

        RDD是物理级别的;

        

DSTream中关键代码说明:// DStream.scala line 83
// RDDs generated, marked as private[streaming] so that testsuites can access it
@transient
private[streaming] var generatedRDDs = new HashMap[Time, RDD[T]] ()

这里的HashMap,以时间为key,以RDD为value,DStream随着时间的流逝,不断的生成RDD,基于RDD不但的产生依赖关系的job,并通过jobScheduler在集群上运行。再次验证了DStream就是RDD的模版。

  

终极总结:

DStream就是对RDD操作封装的集合,对DStream操作的transform的操作就会作用于内部封装的集合的每一个RDD,所以对RDD的操作就产生了RDD之间的依赖关系就构成了DAG的依赖关系,

为什么会对RDD进行操作?这个是对DStream操作的业务逻辑,也就是空间维度决定的,这空间维度作用于DStream这样一个集合,随着时间的流逝每个Batch Interval形成了具体的数据集产生了RDD,

对RDD进行transform操作,进而形成了RDD的依赖关系RDD DAG,形成job。然后jobScheduler根据时间调度,基于RDD的依赖关系,把作业发布到Spark Cluster上去运行,不断的产生Spark作业。

特别感谢王家林老师的独具一格的讲解:

王家林老师名片:

中国Spark第一人

新浪微博:http://weibo.com/ilovepains

微信公众号:DT_Spark

博客:http://blog.sina.com.cn/ilovepains

QQ:1740415547

YY课堂:每天20:00现场授课频道68917580

时间: 2024-10-14 16:58:31

Spark版本定制:通过案例对SparkStreaming透彻理解三板斧之二:解密SparkStreaming运行机制和架构的相关文章

定制班第1课:通过案例对SparkStreaming 透彻理解三板斧之一:解密SparkStreaming另类实验及SparkStreaming本质解析

从今天起,我们踏上了新的Spark学习旅途.我们的目标是要像Spark官方机构那样有能力去定制Spark版本. 我们最开始将从Spark Streaming着手. 为何从Spark Streaming切入Spark版本定制?Spark的子框架已有若干,为何选择Spark Streaming?让我们细细道来. Spark最开始只有Spark Core,没有目前的这些子框架.我们通过对一个框架的彻底研究,肯定可以精通Spark力量的源泉和所有问题的解决之道. 我们再看看目前的这些子框架.Spark

spark版本定制:SparkStreaming 透彻理解三板斧之三:解密SparkStreaming运行机制和架构进阶之Job和容错

本期内容: 1.解密Spark Streaming Job架构和运行机制 2.解密Spark Streaming 容错架构和运行机制 一.解密Spark Streaming Job架构和运行机制 通过代码洞察Job的执行过程: object OnlineForeachRDD2DB { def main(args: Array[String]){ /* * 第1步:创建Spark的配置对象SparkConf,设置Spark程序的运行时的配置信息 */ val conf = new SparkCon

第3课:通过案例对SparkStreaming 透彻理解三板斧之三:解密SparkStreaming运行机制和架构进阶之Job和容错

理解Spark Streaming的Job的整个架构和运行机制对于精通Spark Streaming是至关重要的. 一 首先我们运行以下的程序,然后通过这个程序的运行过程进一步加深理解Spark Streaming流处理的Job的执行的过程,代码如下: object OnlineForeachRDD2DB { def main(args: Array[String]){ /* * 第1步:创建Spark的配置对象SparkConf,设置Spark程序的运行时的配置信息, * 例如说通过setMa

第3课:SparkStreaming 透彻理解三板斧之三:解密SparkStreaming运行机制和架构进阶之Job和容错

本期内容: 解密Spark Streaming Job架构和运行机制 解密Spark Streaming容错架构和运行机制 理解SparkStreaming的Job的整个架构和运行机制对于精通SparkStreaming是至关重要的.我们知道对于一般的Spark应用程序来说,是RDD的action操作触发了Job的运行.那对于SparkStreaming来说,Job是怎么样运行的呢?我们在编写SparkStreaming程序的时候,设置了BatchDuration,Job每隔BatchDurat

通过案例对SparkStreaming 透彻理解三板斧之一:解密SparkStreaming另类实验

从spark框架的角度来说,spark包含了如下图所示的功能: 从最近spark发布的几个版本来看,GraphX一直没有大的变化,MLlib涉及大量的数学,spark sql则是涉及了大量的sql的优化,所以如果要从某一个子框架来彻底研究spark 那么,spark streaming子框架是最好的切入口.因为本身它就很像是spark core 的一个应用程序.2015年是流式处理的一年,一切数据不是流式处理的话,那么它将失去它应有的价值. Sparkstreaming可以调用,sparksql

第1课:通过案例对SparkStreaming 透彻理解三板斧之一:解密SparkStreaming另类实验及SparkStreaming本质解析

背景: 使用Spark主要是使用Spark Streaming,Spark Streaming的魔力之所在于: 1. 流式处理,如今是一个流处理时代,一切与流不相关的都是无效的数据. 2. 流式处理才是真正的对大数据的印象.Spark Streaming的流式处理非常强大的一个功能是可以在线处理,ML,Spark SQL等流进来的数据,这也是Spark提供的一体化,多元化的技术架构设计带来的优势. 3. Spark Streaming本身是一个程序,Spark Streaming在处理数据的时候

Spark定制版2:通过案例对SparkStreaming透彻理解三板斧之二

本节课主要从以下二个方面来解密SparkStreaming: 一.解密SparkStreaming运行机制 二.解密SparkStreaming架构 SparkStreaming运行时更像SparkCore上的应用程序,SparkStreaming程序启动后会启动很多job,每个batchIntval.windowByKey的job.框架运行启动的job.例如,Receiver启动时也启动了job,此job为其他job服务,所以需要做复杂的spark程序,往往多个job之间互相配合.SparkS

第2课:通过案例对SparkStreaming 透彻理解三板斧之二:解密SparkStreaming运行机制和架构

本篇博文将从以下几点组织文章: 1. 解密Spark Streaming运行机制 2. 解密Spark Streaming架构 一:解密Spark Streaming运行机制 1. DAG生成模板 :DStreamGraph a) Spark Streaming中不断的有数据流进来,他会把数据积攒起来,积攒的依据是以Batch Interval的方式进行积攒的,例如1秒钟,但是这1秒钟里面会有很多的数据例如event,event就构成了一个数据的集合,而RDD处理的时候,是基于固定不变的集合产生

第2课:SparkStreaming 透彻理解三板斧之二:解密SparkStreaming运行机制和架构

本期内容: 解密Spark Streaming 运行机制 解密Spark Streaming 框架 Spark Streaming是Spark的一个子框架,但是它更像是运行在Spark Core上的一个应用程序.Spark Streaming在启动时运行了很多的job,并且job之间相互配合. Job围绕了两个方面: 1. 对输入数据流进行计算的Job 2. 框架自身运行需要的Job,例如Receiver启动. Spark Streaming本身就是一个非常复杂的应用程序,如果你对SparkSt