Spark Streaming揭秘 Day23 启动关闭源码图解 今天主要分析一下SparkStreaming的启动和关闭过程. 从Demo程序出发,主要聚焦在两段代码: 启动代码: 关闭代码: 启动过程 StreamingContext是对SparkContext的封装,是个装饰器模式,相当于给SparkCore化妆. 其中最关键的参数是Batch Duration,Driver和Executor上的两个定时器都是基于这个参数. 在构造时创建的关键对象如下: DStreamGraph,DStr…
Spark Streaming揭秘 Day5 初步贯通源码 引子 今天,让我们从Spark Streaming最重要的三个环节出发,让我们通过走读,逐步贯通源码,还记得Day1提到的三个谜团么,让我们开始解密吧. 1.创建StreamingContext StreamingContext是Spark Streaming是运行基础,也是负责管理和其运行的重要组件. 我们需要特别注意下面这段代码: 可以看到,StreamingContext内部包涵了一个SparkContext,这个可以告诉我们St…
本課主題 Spark Worker 原理 Worker 启动 Driver 源码鉴赏 Worker 启动 Executor 源码鉴赏 Worker 与 Master 的交互关系 [引言部份:你希望读者看完这篇博客后有那些启发.学到什么样的知识点] 更新中...... Spark Worker 原理图 Worker 启动 Driver 源码鉴赏 因为 Worker 中有消息的循环体,可以用来接收消息,接上一章介绍当 Master 把一个 LaunchDriver 发送到 Worker 的时候,Wo…
本课主题 Spark Worker 原理 Worker 启动 Driver 源码鉴赏 Worker 启动 Executor 源码鉴赏 Worker 与 Master 的交互关系 Spark Worker 原理图 Worker 启动 Driver 源码鉴赏 因为 Worker 中有消息的循环体,可以用来接收消息,接上一章介绍当 Master 把一个 LaunchDriver 发送到 Worker 的时候,Worker 接收这个 LaunchDriver 然后创建一个新的 DriverRunner…
Spark Streaming揭秘 Day25 StreamingContext和JobScheduler启动源码详解 今天主要理一下StreamingContext的启动过程,其中最为重要的就是JobScheduler的启动. StreamingContext启动 我们首先看下start方法的上半部分. 首先进行模式匹配,这是一个标准的条件判断,默认是INITIALIZED状态. 这里有三个关键部分: validate方法,会进行一些前置条件的判断.其中比较关键的是对DStreamGraph进…
Spark Streaming揭秘 Day26 JobGenerator源码图解 今天主要解析一下JobGenerator,它相当于一个转换器,和机器学习的pipeline比较类似,因为最终运行在SparkCore上,作为应用程序,需要开发者提供一些信息才能够运行. 简述 JobGenerator这个类会负责从DStream中产生Jobs,同时进行checkpoint和清理数据. JobGenerator的核心是一个钟,这里采用反射生成,并提供给定时器,根据周期性触发事件 generateJob…
Spark Streaming揭秘 Day22 架构源码图解 今天主要是通过图解的方式,对SparkStreaming的架构进行一下回顾. 下面这个是其官方标准的流程描述. SparkStreaming会源源不断的接收数据源,然后根据时间切割成不同的Batch,每个Batch都会产生RDD,RDD运行在Spark的引擎之上,处理会产生运行的结果. 我们对其进行细化,可以分解为8个步骤: Step1:获取外部数据源,最经典的来源于Kafka,其它例如Flume.数据库.HBase等 Step2.3…
Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕 今天会逐行解析一下SparkStreaming运行的日志,运行的是WordCountOnline这个Demo. 启动过程 SparkStreaming启动是从如下日志开始: 16/06/16 21:26:44 INFO ReceiverTracker: Starting 1 receivers 16/06/16 21:26:44 INFO ReceiverTracker: Recei…
Spark Streaming揭秘 Day7 再探Job Scheduler 今天,我们对Job Scheduler再进一步深入一下,对一些更加细节的源码进行分析. Job Scheduler启动 在Job Scheduler的启动代码中,我们发现其采用了新建Thread的方式来启动代码 在更早的Spark版本中,并没有采用这种方式,为啥要这么多做? 从注释中,很明确的指出了,这么做的原因主要是对于变量的隔离 通过启动线程,可以使运行和用户处理线程没有关系,从而避免用户线程中变量设置的干扰 从变…
Spark Streaming揭秘 Day32 WAL框架及实现 今天会聚焦于SparkStreaming中非常重要的数据安全机制WAL(预写日志). 设计要点 从本质点说,WAL框架是一个存储系统,可以简单的认为是一个文件系统,其作用类似于BlockManager, 我们首先看一下官方的说明: 这里有三个要点: 总体上,sparksteaming是用WAL去保存接收到的数据,并且在写入数据后,要把元数据汇报给Driver,这样失败了才能恢复起来. 每当写入一个log,就返回一个handle,h…