本期内容 :

  • DStream与RDD关系彻底研究
  • Streaming中RDD的生成彻底研究

  

  问题的提出 :

  1、 RDD是怎么生成的,依靠什么生成

  2、执行时是否与Spark Core上的RDD执行有什么不同的

  3、 运行之后我们要怎么处理

    为什么有第三点 : 是因为Spark Streaming 中会随着相关触发条件,窗口Window滑动的时候都会不断的产生RDD ,

  从最基本的层次考虑,RDD也是基本对象,每秒会产生RDD ,内存能不能完全容纳,每个处理完成后怎么进行管理?

  

一、 整个Spark Streaming操作的InPutDStream的流程源码

   

   

   

   

   

  ForEachDStreams的产生有两种方式 :

  1、 一种是DStreams 的Action,这是作业的产生且执行

  2、 ForEachRDD也会产生ForEachDStreams,如果在ForEachRDD中没有Action级别的操作的话是不会执行作业的,

  ForEachDStreams 不一定会触发Job的执行,但是一定会触发Job的产生,这句话是假的,因为是需要定时器Time与业务逻辑代码来产生的

  

  ForEachDStreams 与Job的关系 :

  1、 ForEachDStreams 与Job是否执行实际上是没有什么关系的,不一定触发Job的执行

  2、 有ForEachDStreams的时候会产生Job ,这句话是假的,在没有ForEachDStreams的时候也会继续产生Job

  Job的产生与业务逻辑代码没有什么关系,只是跟框架的调度,框架的定时器时间到了就会产生Job

  

  

  ForEachRDD是Spark RDD的后门,因为其是直接对RDD进行操作,但是背后还是封装成了ForEachStream,实际上在流处理中直接对RDD进行操作,但是本身还是产生了DStreams,在这个Spark Streaming的逻辑操作中,我们看到的都是对DStreams进行操作,其实就是对DStreams进行操作就是对RDD进行操作,DStreams就是RDD的一套模板,后面的DStreams对前面的DStreams有依赖。

  为什么说后面的DStreams对前面的DStreams有依赖呢?源码如下:

  

  

  

  DStreams依赖以其它的DStreams ,除了第一个DStreams ,因为其是数据源产生的。

  基于DStreams是怎么产生RDD ,是时间Time通过函数来产生的RDD ,是RDD的模板。

  要研究RDD到底是怎么生成的 ,查看整个DStreams的操作,肯定有地方触发使RDD的生成,根据源码的路径跟踪RDD到底是怎么生成的 ?

  

  RDD的生命周期 : 均是后面依赖前面,每一步都会产生DStreams实例,DStreams是RDD的模板

  为什么DStreams是从后面依赖前面的呢? DStreams必须是后往前依赖,有三点目的:

  1、 是代表Spark Streaming级别的业务逻辑操作

  2、 目的是根据这个生成RDD ,而RDD就是从后往前依赖的

  3、 DStreams是lazy级别的,lazy级别是从后往前依赖奠定了基础

  最重要的原因是第二点,DStreams的依赖必须要与RDD的依赖保持高度的一致,因为要根据时间间隔去生成RDD

  

  

  流程总结 :

    从产生级别理解,每一个RDD都对应一个Job ,就是DStreams操作的最后的一个RDD ,最后的RDD对前面有依赖关系,只要有最后一个RDD就可以推导出所有的RDD

  每一个DStreams的实例都有一个GeneratedRDD ,都有HashMap ,实际上执行的时候我们只需要关注最后一个,实际计算时就是从后往前推。

  逻辑级别 :有一个又一个的DStreams对象,通过Map等操作都会产生DStreams对象,DStreams模板会随着时间的推移会产生一系列的RDD ,随着时间实例的推移,有时间注入就会产生RDD。

  实际执行 : Spark STreaming操作就看最后一个DStreams ,从后往前找出RDD的依赖关系,相当于一个矩阵,加上时空维度。

  

  GeneratdRDD是怎么获取的 :

  DStream里面有个GetorCompute方法,就是根据时间生成RDD ,可能是缓冲级别获取的,或者计算出来的。

  

  如果没有依赖就必将是自力更生:

  

  Map的DStreams ,是有依赖的,GetOrCompute产生RDD ,看到很多DStreams其实就是一个DStreams ,DStreams是逻辑级别的呈现,都是从后往前推.

  Map会对RDD进行操作,DStreams里面的计算其实就是对RDD进行计算。

  

  GetOrCompute返回的是RDD ,还有一个就是ForEachDStreams :

  

  GenerateJob是通过调度器控制的 :

  

 GenerateJob会去调用DStreams ,然后会调度到GenerateJob :

  

   

Spark Streaming源码解读之生成全生命周期彻底研究与思考的更多相关文章

  1. Spark Streaming源码解读之Receiver生成全生命周期彻底研究和思考

    本期内容 : Receiver启动的方式设想 Receiver启动源码彻底分析 多个输入源输入启动,Receiver启动失败,只要我们的集群存在就希望Receiver启动成功,运行过程中基于每个Tea ...

  2. Spark Streaming源码解读之JobScheduler内幕实现和深度思考

    本期内容 : JobScheduler内幕实现 JobScheduler深度思考 JobScheduler 是整个Spark Streaming调度的核心,需要设置多线程,一条用于接收数据不断的循环, ...

  3. Spark Streaming源码解读之流数据不断接收和全生命周期彻底研究和思考

    本节的主要内容: 一.数据接受架构和设计模式 二.接受数据的源码解读 Spark Streaming不断持续的接收数据,具有Receiver的Spark 应用程序的考虑. Receiver和Drive ...

  4. 15、Spark Streaming源码解读之No Receivers彻底思考

    在前几期文章里讲了带Receiver的Spark Streaming 应用的相关源码解读,但是现在开发Spark Streaming的应用越来越多的采用No Receivers(Direct Appr ...

  5. Spark Streaming源码解读之流数据不断接收全生命周期彻底研究和思考

    本期内容 : 数据接收架构设计模式 数据接收源码彻底研究 一.Spark Streaming数据接收设计模式   Spark Streaming接收数据也相似MVC架构: 1. Mode相当于Rece ...

  6. Spark Streaming源码解读之Job动态生成和深度思考

    本期内容 : Spark Streaming Job生成深度思考 Spark Streaming Job生成源码解析 Spark Core中的Job就是一个运行的作业,就是具体做的某一件事,这里的JO ...

  7. 16.Spark Streaming源码解读之数据清理机制解析

    原创文章,转载请注明:转载自 听风居士博客(http://www.cnblogs.com/zhouyf/) 本期内容: 一.Spark Streaming 数据清理总览 二.Spark Streami ...

  8. 11.Spark Streaming源码解读之Driver中的ReceiverTracker架构设计以及具体实现彻底研究

    上篇文章详细解析了Receiver不断接收数据的过程,在Receiver接收数据的过程中会将数据的元信息发送给ReceiverTracker:   本文将详细解析ReceiverTracker的的架构 ...

  9. 14:Spark Streaming源码解读之State管理之updateStateByKey和mapWithState解密

    首先简单解释一下)) //要使用updateStateByKey方法,必须设置Checkpoint. ssc.checkpoint("/checkpoint/") val sock ...

随机推荐

  1. php 判断复选框checkbox是否被选中

    php 判断复选框checkbox是否被选中   复选框checkbox在php表单提交中经常被使用到,本文章通过实例向大家介绍php如何判断复选框checkbox中的值是否被选中,需要的朋友可以参考 ...

  2. Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition)

    A.暴力枚举,注意游戏最长为90分钟 B.暴力,c[l]++,c[r]--,记录中间有多长的段是大小为n的,注意特判m=0的情况 C.暴力枚举,我居然一开始没想出来!我一直以为每次都要统计最大的,就要 ...

  3. MVC的用法和作用

    最近在学习IOS项目的时候,老师经常提起MVC,在理解的过程中,越来越发现MVC的魅力,MVC:M:Model V:View C:Controller:Model 是用来存储数据的,View 是用来显 ...

  4. 一个简单的linux线程池(转-wangchenxicool)

    线程池:简单地说,线程池 就是预先创建好一批线程,方便.快速地处理收到的业务.比起传统的到来一个任务,即时创建一个线程来处理,节省了线程的创建和回收的开销,响应更快,效率更高. 在linux中,使用的 ...

  5. FlashFXP 破解代码

    FlashFXP RealKEY: ------------- 将以下内容COPY到软件里面的注册框即可 ------------- FLASHFXPwQAOlhkgwQAAAAC6W5MNJwTns ...

  6. std::ostringstream输出流详解

    一.简单介绍 ostringstream是C++的一个字符集操作模板类,定义在sstream.h头文件中.ostringstream类通常用于执行C风格的串流的输出操作,格式化字符串,避免申请大量的缓 ...

  7. (转)几种范数的解释 l0-Norm, l1-Norm, l2-Norm, … , l-infinity Norm

    几种范数的解释 l0-Norm, l1-Norm, l2-Norm, - , l-infinity Norm from Rorasa's blog l0-Norm, l1-Norm, l2-Norm, ...

  8. Python之路,day2-Python基础1

    python2 range(20) for i in range(10): print(i) range(1,10)  ----->从1开始到9 else: #如果for循环正常结束,  就执行 ...

  9. 在AD转换中的过采样和噪声形成

    1. 直接量化的过采样AD转换 此类系统的模型可以用下图表示. 图中xa(t)是输入信号,e(t)是量化引入的噪声,xd[n]是最终得到的数字信号,包含分量xda和xde. 对于M倍过采样,信号与量化 ...

  10. CentOS 6.5 安装 Python3

    1.安装环境 yum -y install gcc zlib-devel make 2.下载python版本 wget http://www.python.org/ftp/python/3.5.1/P ...