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

本期内容:

1 解密Spark Streaming运行机制

2 解密Spark Streaming架构

1 解密Spark Streaming运行机制

我们看看上节课仍没有停下来的Spark Streaming程序运行留下的信息。

  这个程序仍然在不断地循环运行。即使没有接收到新数据,日志中也不断循环显示着JobScheduler、BlockManager、MapPartitionsRDD、ShuffledRDD等等信息。这些都是Spark Core相关的信息。其循环的依据,也就是时间这个维度。

  RDD之间的具体依赖,构成了空间维度。DStream就是在RDD的基础上增加了时间维度。所以整个Spark Streaming就是时空维度。

  继续拿上节课的程序例图进行说明。

  我们知道Spark
Core处理的每一步都是基于RDD的,RDD之间有依赖关系。上图的例子中,RDD的DAG显示的是有3个Action,会触发3个Job,RDD自下向上依赖,RDD产生Job就会具体的执行。从DSteam Graph中可以看到,DStream的逻辑与RDD基本一致,它就是在RDD的基础上加上了时间的依赖。RDD的DAG又可以叫空间维度,也就是说整个Spark Streaming多了一个时间维度,也就构成了时空维度。

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

  对于Spark Streaming来说,当不同的数据来源的数据流进来的时候,基于固定的时间间隔,会形成一系列固定不变的数据集或event集合(例如来自flume和kafka)。而这正好与RDD基于固定的数据集不谋而合,事实上,由DStream基于固定的时间间隔形成的RDD
Graph正是基于某一个batch的数据集的。

  从上图中可以看出,在每一个batch上,空间维度的RDD依赖关系都是一样的,不同的是这个五个batch流入的数据规模和内容不一样,所以说生成的是不同的RDD依赖关系的实例。RDD的Graph脱胎于DStream的Graph,也就是说DStream就是RDD的模版。在不同的时间间隔,会生成不同的RDD Graph实例。

2 解密Spark Streaming架构

  Spark Streaming架构中有以下几个要点:

  1. 需要RDD DAG的生成模版:DStream Graph

  2. 需要基于Timeline的Job控制器

  3. 需要InputStreamings和OutputStreaming,代表数据的输入和输出

  4. 具体的Job运行在Spark Cluster之上,此时系统容错就至关重要。

    Spark Streaming在流量过大时能限流,能动态的调整CPU、内存等资源。

  5. 事务处理,我们希望流进来的数据一定会被处理,而且只处理一次。在处理出现崩溃的情况下如何保证Exactly once的事务语意。

  看源码来剖析一下。先看DStream。

  从这里可以看出,DStream就是Spark Streaming的核心,就像RDD是Spark
Core的核心,它也有dependencies和compute。更为关键的是下面的代码:

  这是一个HashMap,以时间为key,以RDD为value。DStream就是RDD的模版。

  DStream有很多子类。

  DStream间的转换操作就是子类的转换。也实际上是RDD的转换,然后产生依赖关系的Job,并通过JobScheduler在集群上运行。

  DStream可以说是逻辑级别的,RDD就是物理级别的,DStream所表达的最终都是转换成RDD去实现。前者是更高级别的抽象,后者是底层的实现。DStream实际上就是在时间维度上对RDD集合的封装,DStream与RDD的关系就是随着时间流逝不断的产生RDD,对DStream的操作就是在固定时间上操作RDD。

总结:

  在空间维度上的业务逻辑作用于DStream,随着时间的流逝,每个Batch
Interval形成了具体的数据集,产生了RDD,对RDD进行transform操作,进而形成了RDD的依赖关系RDD DAG,形成Job。然后JobScheduler根据时间调度,基于RDD的依赖关系,把作业发布到Spark集群上去运行,不断的产生Spark作业。

备注:

更多私密内容,请关注微信公众号:DT_Spark

如果您对大数据Spark感兴趣,可以免费听由王家林老师每天晚上20:00开设的Spark永久免费公开课,地址YY房间号:68917580

时间: 2024-10-21 05:18:14

Spark定制班第2课:通过案例对Spark Streaming透彻理解三板斧之二:解密Spark Streaming运行机制和架构的相关文章

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

本期内容: 1. Spark Streaming架构 2. Spark Streaming运行机制 Spark大数据分析框架的核心部件: spark Core.spark  Streaming流计算.GraphX图计算.MLlib机器学习.Spark SQL.Tachyon文件系统.SparkR计算引擎等主要部件. Spark Streaming 其实是构建在spark core之上的一个应用程序,要构建一个强大的Spark应用程序 ,spark  Streaming是一个值得借鉴的参考,spa

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

本期内容: 1.解密Spark Streaming运行机制 2.解密Spark Streaming架构 上期回顾: 1.技术界的寻龙点穴,每个领域都有自己的龙脉,Spark就是大数据界的龙脉,Spark Streaming就是Spark的龙血: 2.采用了降维(把时间Batch Interval放大)的方式,进行案例演示实战,得到的结论是:特定的时间内是RDD在执行具体的Job: 一.解密Spark Streaming运行机制和架构 运行机制概念:       Spark Streaming运行

通过案例对 spark streaming 透彻理解三板斧之三:spark streaming运行机制与架构

本期内容: 1. Spark Streaming Job架构与运行机制 2. Spark Streaming 容错架构与运行机制 事实上时间是不存在的,是由人的感官系统感觉时间的存在而已,是一种虚幻的存在,任何时候宇宙中的事情一直在发生着的. Spark Streaming好比时间,一直遵循其运行机制和架构在不停的在运行,无论你写多或者少的应用程序都跳不出这个范围. 一.   通过案例透视Job执行过程的Spark Streaming机制解析,案例代码如下: import org.apache.

Spark定制班第4课:Spark Streaming的Exactly-One的事务处理和不重复输出彻底掌握

本篇文章主要从二个方面展开: 本期内容 1 Exactly Once 2 输出不重复 1 Exactly Once 事务: 银行转帐为例,A用户转笔账给B用户,如果B用户没收到账,或者收到多笔账,都是破坏事务的一致性.事务处理就是,能够处理且只会处理一次,即A只转一次,B只收一次. 从事务视角解密SparkStreaming架构: SparkStreaming应用程序启动,会分配资源,除非整个集群硬件资源崩溃,一般情况下都不会有问题.SparkStreaming程序分成而部分,一部分是Drive

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

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

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

一. 源码定制为什么从Spark Streaming切入? Spark 一开始并没我们今天看到的Spark SQL, Spark Streaming, MLlib(machine learning), GraphX(graph), Spark R等相关内容,只有原始的Spark Core. Spark Streaming本身是Spark Core上的一个框架,透过一个框架的彻底研究肯定可以精通Spark力量的源泉和所有Spark问题的解决之道. Spark现在使用较多的除了Spark Core之

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处理的时候,是基于固定不变的集合产生

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

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