Spark Streaming揭秘 Day7

再探Job Scheduler

今天,我们对Job Scheduler再进一步深入一下,对一些更加细节的源码进行分析。

Job Scheduler启动

在Job Scheduler的启动代码中,我们发现其采用了新建Thread的方式来启动代码

在更早的Spark版本中,并没有采用这种方式,为啥要这么多做?
从注释中,很明确的指出了,这么做的原因主要是对于变量的隔离
通过启动线程,可以使运行和用户处理线程没有关系,从而避免用户线程中变量设置的干扰

从变量定义可以看到,使用了ThreadLocal,从而保证了变量是私有的

线程池

根据前面几篇的描述,我们知道在Job Scheduler中运行Job是采用了线程池的方式,下面是线程池jobExecutor的具体定义

我们发现,线程池的默认大小是1,这个是由SparkStreaming默认的特性决定了,也就是说在默认情况下,Batch Duration之间的Job会发生等待。
但是,当有Batch Duration需要有多个Output操作的话,我们可以提高并行度,提高性能。

Job运行的什么?

进一步深入线程池,我们发现其最终是调用了job的run方法来运行

Job的run方法中,只是触发了对func的执行,那么func是从哪里来的呢。

func是在DStream中产生的,关键就是如下generateJob方法:

往上追溯,其调用在graph中,是针对outputStream。

进入一个具体的方法,我们发现,这个就是我们的业务逻辑代码。

从而我们知道,每个Job实际运行的就是在outputStream中定义的业务方法。

下面问题又来了,只是outputStream调用的话,其他DStream的逻辑又是如何处理?卖个关子,我们明天再谈。

小结

Dstream在RDD基础上加了一层薄薄的时间的封装,JobScheduler的作用是从时间维度去调用空间维度,时空结合之后就变成物理级别的了,变成了我们具体的业务处理。

欲知后事如何,且听下回分解

DT大数据每天晚上20:00YY频道现场授课频道68917580

Spark Streaming揭秘 Day7 再探Job Scheduler的更多相关文章

  1. Spark Streaming揭秘 Day34 解析UI监听模式

    Spark Streaming揭秘 Day34 解析UI监听模式 今天分享下SparkStreaming中的UI部分,和所有的UI系统一样,SparkStreaming中的UI系统使用的是监听器模式. ...

  2. Spark Streaming揭秘 Day32 WAL框架及实现

    Spark Streaming揭秘 Day32 WAL框架及实现 今天会聚焦于SparkStreaming中非常重要的数据安全机制WAL(预写日志). 设计要点 从本质点说,WAL框架是一个存储系统, ...

  3. Spark Streaming揭秘 Day30 集群模式下SparkStreaming日志分析

    Spark Streaming揭秘 Day30 集群模式下SparkStreaming日志分析 今天通过集群运行模式观察.研究和透彻的刨析SparkStreaming的日志和web监控台. Day28 ...

  4. Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕

    Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕 今天会逐行解析一下SparkStreaming运行的日志,运行的是WordCountO ...

  5. Spark Streaming揭秘 Day25 StreamingContext和JobScheduler启动源码详解

    Spark Streaming揭秘 Day25 StreamingContext和JobScheduler启动源码详解 今天主要理一下StreamingContext的启动过程,其中最为重要的就是Jo ...

  6. Spark Streaming揭秘 Day18 空RDD判断及程序中止机制

    Spark Streaming揭秘 Day18 空RDD判断及程序中止机制 空RDD的处理 从API我们可以知道在SparkStreaming中,对于RDD的操作一般都是在foreachRDD和Tra ...

  7. Spark Streaming揭秘 Day16 数据清理机制

    Spark Streaming揭秘 Day16 数据清理机制 今天主要来讲下Spark的数据清理机制,我们都知道,Spark是运行在jvm上的,虽然jvm本身就有对象的自动回收工作,但是,如果自己不进 ...

  8. Spark Streaming揭秘 Day5 初步贯通源码

    Spark Streaming揭秘 Day5 初步贯通源码 引子 今天,让我们从Spark Streaming最重要的三个环节出发,让我们通过走读,逐步贯通源码,还记得Day1提到的三个谜团么,让我们 ...

  9. Spark Streaming揭秘 Day2-五大核心特征

    Spark Streaming揭秘 Day2 五大核心特征 引子 书接上回,Streaming更像Spark上的一个应用程序,会有多个Job的配合,是最复杂的Spark应用程序.让我们先从特征角度进行 ...

随机推荐

  1. c盘太小

    C:\Users\Administrator\AppData\Roaming\Apple Computer

  2. SQLServer 之 常用函数及查看

    一.查看 (1)应用程序名称              SELECT APP_NAME() (2)获取登录者名字           SELECT SUSER_NAME() (3)获取字段定义的长度  ...

  3. Android 高级UI设计笔记06:仿微信图片选择器(转载)

    仿微信图片选择器: 一.项目整体分析: 1. Android加载图片的3个目标: (1)尽可能的去避免内存溢出. a. 根据图片的显示大小去压缩图片 b. 使用缓存对我们图片进行管理(LruCache ...

  4. iOS之内购

    很久之前就想出一篇IOS内付费的教程,但是一查网上的教程实在太多了,有的写得真的蛮不错的,就心想算了,于是就保存在草稿箱了.至于为什么写完它呢!真是说来话长,最近公司有个项目经理跑来问我有关苹果内付费 ...

  5. Eclipse NDK 配置,无需安装Cygwin

    Eclipse NDK 配置,不用安装Cygwin 文章转自http://www.cnblogs.com/chenjiajin/archive/2012/04/12/2444188.html 一.关于 ...

  6. css尖角

    .market-nav-arrow { ; ; ; border-style: solid; border-width: 7px 0px 7px 7px; border-color: transpar ...

  7. 把mvc4彻底搞定(一)

    1 .net web开发方式 webform开发 asp.net mvc开发 2 请求模式 webform方式:客户端向服务端请求一个aspx页面,服务端生成一个页面对象类,调用这个页面对象类的PR方 ...

  8. ORACLE 小写金额转大写金额

    Create Or Replace Function Money2Chinese(Money In Number) Return Varchar2 Is strYuan Varchar2(); str ...

  9. ios开发:OC对象的内存分析

    最近要开始准备找实习单位了,做做笔试题,看看各位大神的面试经历,发现自己要学习的东西真的还有很多,虽然也做过几个的项目,但是真正拿过笔试题一看,才发现自己对基础这方面的东西,确实有点忽视了,所以最近开 ...

  10. iOS预处理指令

    预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器.可见预处理过程先于编译器对源代码进行处理. 预处理指令是以#开头的代码行,#后是指令关键字,在关键字和#号之间允许存在任意个数的空 ...