本期内容 :

  • Spark Streaming Job生成深度思考
  • Spark Streaming Job生成源码解析

  

  Spark Core中的Job就是一个运行的作业,就是具体做的某一件事,这里的JOB由于它是基于Spark Core所以Spark Streaming对其进行了封装。

  大数据开发应用中少不了定时任务,是否相当于流式处理,只是期间的时间间隔的不同而已,所以数据都可以认为是流式处理。

一、 JobGenerator 作业动态生成的一个类 :

  JobGenerator是个普通的类,作业调度的核心是提交作业、作业生成的方方面面、生成后的Job提交到集群都是由JobSchedule决定的,

  这个类JobGenerator是基于 DStreams生成Jobs ,基于Spark Streaming编程时都会产生一系列的DStreams 。

  DStreams有三种类型 :

  1、 输入的DStreams,可以有各种不同的数据来源来构建

  2、 输出的DStreams是一种逻辑级别的 ,它是Spark Streaming框架级别的,它的底层会翻译成为物理级别的Action,即RDD的Action;

  3、 中间是业务逻辑的转换过程,及状态转换;

  JobGenerator类源码 :

  

二、 Spark Streams是基于时间为触发器的 :

  大数据开发应用中少不了定时任务,是否相当于流式处理,只是期间的时间间隔的不同,所有的数据都会成为流式处理,都基于Times为基准。

  无论是时间还是事件都统一为一种抽象的统一标准;

  DStreams 的Action也是逻辑级别的操作,Spark Streams会产生一个逻辑级别的Job ,但是它不会运行,而是由底层物理级别的RDD Action去触发的。

  Job的这种特性让你有机会对其进行各种调度与优化。

  基于时间窗口, 每5秒钟都会产生一个Job :

 

  当把DStreams Action逻辑级别翻译成物理级别的最后一个的RDD的Action时,就会立即触发Job执行,如果直接就执行了Job,那就不存在队列 ,源数据也就不受管理了。既要完成翻译也要进行管理,所以把DStreams的依赖关系变成RDD间的依赖关系,最后一个RDD Action的操作翻译成最后一个Action级别的操作,这个翻译后的内容它是放在方法体内。因只是定义还没有执行,所以它里面的Action不会执行触发Job。当我们的JobGenerator 看见要调度的这个Job时再转过来在线程池中拿出一条线程执行刚才的封装的方法。

  1、 JobGenerator基于时间运行源码 :

 

  2、 使用方法进行封装,内部的方法不应该直接去调用,这个方法会基于我们的DStreams(逻辑级别)的操作物化成RDD(物理级别),GenerateJob源码:

  

  3、 基于时间生成后会缓存起来 :

  

  4、 GenerateJob : 生成RDD的实例,RDD的DAG依赖关系:

  

  

Spark Streaming源码解读之Job动态生成和深度思考的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

    本期内容 : DStream与RDD关系彻底研究 Streaming中RDD的生成彻底研究 问题的提出 : 1. RDD是怎么生成的,依靠什么生成 2.执行时是否与Spark Core上的RDD执行有 ...

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

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

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

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

随机推荐

  1. 隐匿在iOS文件系统中的隐私信息

    说明: . 本文仅供安全学习及教学用途,提及的部分技术带有攻击性,请确保合法使用. . “这些都不是我干的,我就负责说出来.” . 图片仅供参考. . 本文所讨论的内容适用于iOS .4环境,其应用程 ...

  2. RFID Hacking④:使用ProxMark3 破解门禁

    文中提及的部分技术可能带有一定攻击性,仅供安全学习和教学用途,禁止非法使用! 0×00 前言 国际黑客大会Defcon传统之一:开锁!因为黑客认为锁也是一种安全挑战.我们在黑客题材电影.电视剧中也常常 ...

  3. IOS 使用FMDB多线程访问数据库 及databaseislocked的问题

    原理:文件数据库sqlite,同一时刻允许多个进程/线程读,但同一时刻只允许一个线程写.在操行写操作时,数据库文件被琐定,此时任何其他读/写操作都被阻塞,如果阻塞超过5秒钟(默认是5秒,能过重新编译s ...

  4. MySQL起航

    以前学php的时候用过MySQL,但是都没有认真地学习,只会在php代码中用几条极其简单SQL语句,以为MySQL就这么点用法,当时还在嘲笑学长们为什么会觉得MySQL难学,真是太尴尬了.好在开了数据 ...

  5. RABBITMQ/JAVA 客户端测试(再补:利用文件流)

    (一)这里可以先复习一下java输入输出流和文件操作--- 1.File类保存文件或目录的各种元数据信息,包括文件名.文件长度.最后修改时间.是否可读.获取当前文件的路径名.判断指定文件是否存在.获取 ...

  6. BZOJ 4034 BIT & Dfs序

    调了恒久突然发现输出优化忘记带负号了.. 就是差分树状数组维护Dfs序即可. #include <iostream> #include <cstring> #include & ...

  7. Ubuntu远程连接windows

    一般情况下都是使用windows系统,通过mstsc远程连接linux系统,但对于一些linuxer来说,有时候需要远程连接一下windows,最后采用的是rdesktop,一个非常好用的工具 sud ...

  8. git 添加ssh的方法 push免登陆

    在github.com上 建立了一个小项目,可是在每次push  的时候,都要输入用户名和密码,很是麻烦 原因是使用了https方式 push 在termail里边 输入  git remote -v ...

  9. C#代码示例_集合

    C#中数组实现为System.Array类得实例,它们只是集合类(Collection Classes)中的一种类型. 索引符(indexer)是一种特殊类型的属性,可以把它添加到一个类中,以提供类似 ...

  10. SpringMVC 用http请求的Get和Post请求作为路由的方法的重载方式

    @Controller @RequestMapping("/messageProcessing") public class WechatPushController { @Aut ...