Spark Streaming揭秘 Day5

初步贯通源码

引子

今天,让我们从Spark Streaming最重要的三个环节出发,让我们通过走读,逐步贯通源码,还记得Day1提到的三个谜团么,让我们开始解密吧。

1.创建StreamingContext

StreamingContext是Spark Streaming是运行基础,也是负责管理和其运行的重要组件。
我们需要特别注意下面这段代码:

可以看到,StreamingContext内部包涵了一个SparkContext,这个可以告诉我们Streaming就是Spark Core上的一个应用程序,体现了不重复造轮子的原则,也是Spark Streaming能如此快发展的一个重要原因。

2.创建SocketInputDStream

还是以Demo代码为例,让我们进入StreamingContext的初始化

其最终是生成了一个SocketInputDstream

在继承关系中,比较关键是下面下两类:
SocketInputDStream
-->DStream

让我们一步一步分析:

2.1 SocketInputDStream
关键是其内部类SocketReceiver

调用流程:
ReceiverSupervisor.start()
-->启动线程调用SocketReceiver.onStart()
-->SocketReceiver.receive()

receive方法是实现具体的逻辑代码(根据不同类型的receiver有不同的实现,建立Socket连接,然后一直循环store)

2.2 DStream,本身是RDD的模板,主要提供生成新RDD的功能
2.2.1 RDD的存储:

可以看到RDD是使用HashMap存储起来,DStream的本质就是存储的一系列的数据流。
2.2.2 RDD的生成:

getOrCompute方法完成了RDD的生成,是SparkStreaming的核心部分,后续会再深入各个子类的compute方法进行研究。

3.StreamingContext启动(start)

让我们进入start方法

这里有两个要注意的地方:
首先,会出现一个判断状态,其作用主要是用来确保一个程序中不能有多个SparkContext,这个也是所有Spark程序都会有的一个限制。
其次,采用了新建Thread的方式进行启动,其中Property采用的是ThreadLocal变量,从确保不同线程间参数信息不会混淆。

让我们进入启动代码的主体:

首先,开启一个eventLoop进行异步调用,进行一些状态信息的管理,eventLoop是Spark中延时调度的实现,非常的精彩,建议仔细阅读下。
其次,启动了rateController速率控制器,这个是SparkStreaming高容错特性的核心。

之后,又到了Day4中提到的ReceiverTrack和JobGenerator

下面,出现了一个很有特色的代码

runDummySparkJob 从注释看,这个Job主要确保Slave在正常工作,是的,这就是三个谜团中提到的Job0,我们可以把其认为是系统自检。

然后,通过调度算法,可以决定在哪个地方启动receiver

让我们再往下,有一个关键出现了:

是的,这个就是三个谜团中提到的Job1 ,利用这个Job,我们可以传递函数至Executor启动ReceiverSupervisor,这里巧妙的利用了Spark分布式机制来实现对于receiver这样基础设施的分布式管理,在不动声色间搞定了一切!!!

最后是JobGenerator的调用,这里,最为关键的概念就是线程池,这个在Day4中已经解析过,就不再重复。

小结

至此,我们走读了SparkContext启动时的关键代码,同时解密了Job0和Job1的作用!!!Spark Streaming中的重要功能基本也是在Spark Core的基础上构造的,它其实是Spark Core上的一个应用程序,那么我们自己编写应用程序的时候,是不是可以有所借鉴呢?

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

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

Spark Streaming揭秘 Day5 初步贯通源码的更多相关文章

  1. Spark Streaming揭秘 Day23 启动关闭源码图解

    Spark Streaming揭秘 Day23 启动关闭源码图解 今天主要分析一下SparkStreaming的启动和关闭过程. 从Demo程序出发,主要聚焦在两段代码: 启动代码: 关闭代码: 启动 ...

  2. Spark Streaming揭秘 Day26 JobGenerator源码图解

    Spark Streaming揭秘 Day26 JobGenerator源码图解 今天主要解析一下JobGenerator,它相当于一个转换器,和机器学习的pipeline比较类似,因为最终运行在Sp ...

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

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

  4. Spark Streaming揭秘 Day22 架构源码图解

    Spark Streaming揭秘 Day22 架构源码图解 今天主要是通过图解的方式,对SparkStreaming的架构进行一下回顾. 下面这个是其官方标准的流程描述. SparkStreamin ...

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

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

  6. Spark Streaming揭秘 Day7 再探Job Scheduler

    Spark Streaming揭秘 Day7 再探Job Scheduler 今天,我们对Job Scheduler再进一步深入一下,对一些更加细节的源码进行分析. Job Scheduler启动 在 ...

  7. Apache Spark源码走读之23 -- Spark MLLib中拟牛顿法L-BFGS的源码实现

    欢迎转载,转载请注明出处,徽沪一郎. 概要 本文就拟牛顿法L-BFGS的由来做一个简要的回顾,然后就其在spark mllib中的实现进行源码走读. 拟牛顿法 数学原理 代码实现 L-BFGS算法中使 ...

  8. Spark Streaming揭秘 Day35 Spark core思考

    Spark Streaming揭秘 Day35 Spark core思考 Spark上的子框架,都是后来加上去的.都是在Spark core上完成的,所有框架一切的实现最终还是由Spark core来 ...

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

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

随机推荐

  1. CCScale9Sprite的使用

    #include "cocos-ext.h" USING_NS_CC_EXT; //框中需要显示的label CCLabelTTF *label = CCLableTTF::cre ...

  2. Android(java)学习笔记94:关于广播接收者的注册和使用心得

    下面我们先看一部分代码,由代码进行进一步的深入: registerReceiver( new BroadcastReceiver() {//onReceive中代码的执行时间不要超过5s,androi ...

  3. Android入门:一、Android Studio 2.1安装及初始化配置

    以前研究过eclipse +ADT开发android app,没深入再加上工作也用不上就扔在那,现在需要做APP开发,发现eclipse +ADT也不再更新了,google推出了功能强大的Androi ...

  4. mysql由于外键关联无法删除数据

    在mysql中删除一张表时候,出现 Error No. 1451 Cannot delete or update a parent row: a foreign key constraint fail ...

  5. javaweb学习总结七(XML语言作用、语法)

    一:XML语言的概念以及作用 1:xml概念:extensible Markup language,可扩展行标记语言,因为html的语法比较混乱,不够严谨. 用html写的系统不好维护,所以w3c组织 ...

  6. LeetCode 203

    Remove Linked List Elements Remove all elements from a linked list of integers that have value val. ...

  7. Kafka分布式消息模型

    Kafka开发的主要初衷目标是构建一个用来处理海量日志,用户行为和网站运营统计等的数据处理框架.在结合了数据挖掘,行为分析,运营监控等需求的情况下,需要能够满足各种实时在线和批量离线处理应用场合对低延 ...

  8. (转载)HashMap工作原理

    HashMap是近些年来java面试中常问到的知识点,很多人(包括我在内)都知道HashMap的用法,也知道HashMap与HashTable之间的区别,但是却不知其所以然,于是乎,本人开始查阅相关资 ...

  9. mysql千万级测试1亿数据的分页分析测试

    本文为本人最近利用几个小时才分析总结出的原创文章,希望大家转载,但是要注明出处 http://blog.sina.com.cn/s/blog_438308750100im0e.html 有什么问题可以 ...

  10. Asp_CRUD

    Asp_增删改查.逻辑流程 启动服务器. 地址为127.0.0.1 端口为随机分配 2607 然后在浏览器中输入http://localhost:2670/CRUD_main.ashx 浏览器像服务器 ...