spark发行版笔记2

spark发行版笔记2

感谢DT大数据梦工厂支持提供以下内容,DT大数据梦工厂专注于Spark发行版定制。详细信息请查看

简介: 王家林:DT大数据梦工厂创始人和首席专家. 联系邮箱[email protected] 电话:18610086859 QQ:1740415547 微信号:18610086859

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

以下是spark官方提供的图片

对于spark sql 来说,主要是sql语句语法的解析,对于我们理解spark核心的来说,是重要的,但是却不是最为重要的。对于机器学习来说,有太多的数学知识,对于理解spark的核心(构建一个类似spark streaming,一个spark core 之上的应用程序或者说应用框架)来说也不是最重要的。对于图计算来说,里面主要涉及到的是图论的知识,对于去重新根据实际的业务需求构建或者优化一个适合业务的基于spark core之上的应用而言,也不是最为重要的。总而言之,目前最为重要的是将spark streaming逐步精通,能够构建一个像spark streaming这样的优秀的框架,并不断的对其进行优化,然后再结合机器学习,图计算等spark的子框架。从而做出一个优秀的spark 发行版。

spark streaming是一种构建在spark上的实时计算框架,它扩展了spark处理大数据流式数据的能力,是spark 核心api的扩展。可以实现高吞吐的,可扩展的,高容错的,可伸缩的实时流处理框架。

最让人激动的是,spark streaming还可以使用spark 的其他的子框架,诸如集群学习,图计算对数据进行处理。

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发行版笔记2_第1张图片


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对应空间维度


spark发行版笔记2_第2张图片

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

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

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

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

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

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

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

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

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


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

具体的job运行在spark cluster之上,此时系统的容错就非常重要,而spark streaimg的容错非常巧妙,它巧妙的借用了spark core rdd的容错而容错。

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


你可能感兴趣的:(spark发行版笔记2)