Spark Streaming源码解读之流数据不断接收全生命周期彻底研究和思考
本期内容 :
- 数据接收架构设计模式
- 数据接收源码彻底研究
一、Spark Streaming数据接收设计模式
Spark Streaming接收数据也相似MVC架构:
1、 Mode相当于Receiver存储数据,C级别的,Receiver是个抽象因为他有好多的Receiver
2、 ReceiverSupervisor 是控制器,因为Receiver启动是靠ReceiverSuperior启动的,及接收到的数据交给ReceiverSuperior存储数据的
3、 Driver会获得源数据,即获得界面,操作的时候是通过界面再操作底层的业务逻辑(拿到了源数据,实质上就是操作了真正数据,即界面)
基于Reverse的角度考虑,Spark Streaming接收数据首先会有个循环器,循环器会不断的次序接收数据,接收到数据后需要存储数据,存储完成数据需要汇报给Driver,接收到数据如果不向Driver汇报的话,Driver在调度的时候可能就不会把接收到的数据计入调度任务中,当Driver接收到接收源数据的相关信息,如 ID、分片等内容,Driver会根据具体数据情况分配Job,Driver本身就是基于原有数据来构造出来的,并分配资源的。
二、 Spark Streaming数据接收源码
ReceiverTracker是通过发送一个又一个的Job,每个Job只有一个的Teark,每个Teark里面只有ReceiverSupervisor 以函数功能角度启动每一个Receiver的。



LaunchReceivers处理流程源码 :





确认数据到达ReceiverTracker


Receiver的产生源码 :





专门为创建Receiver而做的RDD源码 :



ReceiverSupervisor数据存储源码 :
Receiver接收到的数据会给ReceiverSupervisor ,然后ReceiverSupervisor存储数据再把信息汇报给ReceiverTracker(其实是汇报给RPC)。

两个构造器 :


SetupEndpoint 消息循环体源码:




Start启动接收数据 源码 :




数据传入Buffer 并更新到Block 源码 :




把Receiver接收到的数据生成以Batches的类型存在就是Block的形式存在,并存储在适当的地方以特定的频率启动两条线程:
1、 一条线程专门把Receiver接收到的数据合并成Block
2、 另外一条就是把数据合并后的Block提交给manager去存储
上层框架存储数据需要通过manager去存储,不要在Receiver中启动BlockGenerator ,担心有延迟来不及处理你的数据,可能Receiver存储数据时会报错。
限流BlockGenerator是继承RateLimiter ,不能直接限定流入的数据,但是可以限定存储的数据流速度,相当于限定了流动的数据。
BlockGenerator是由CreateBlockGenerator产生的 :




StartReceiver 接收数据与存储数据源码 :



进入Start方法会有不同类型分别进行启动,

系统调用这个函数必须初始化所有资源包括线程、Buffer来接收数据,而且必须是非阻塞的,存储数据的话需要调用Spark的Store








根据时间频率生成一个个的Block,并把数据不断合并起来的








Spark Streaming源码解读之流数据不断接收全生命周期彻底研究和思考的更多相关文章
- Spark Streaming源码解读之流数据不断接收和全生命周期彻底研究和思考
本节的主要内容: 一.数据接受架构和设计模式 二.接受数据的源码解读 Spark Streaming不断持续的接收数据,具有Receiver的Spark 应用程序的考虑. Receiver和Drive ...
- 9. Spark Streaming技术内幕 : Receiver在Driver的精妙实现全生命周期彻底研究和思考
原创文章,转载请注明:转载自 听风居士博客(http://www.cnblogs.com/zhouyf/) Spark streaming 程序需要不断接收新数据,然后进行业务逻辑 ...
- Spark Streaming源码解读之JobScheduler内幕实现和深度思考
本期内容 : JobScheduler内幕实现 JobScheduler深度思考 JobScheduler 是整个Spark Streaming调度的核心,需要设置多线程,一条用于接收数据不断的循环, ...
- 15、Spark Streaming源码解读之No Receivers彻底思考
在前几期文章里讲了带Receiver的Spark Streaming 应用的相关源码解读,但是现在开发Spark Streaming的应用越来越多的采用No Receivers(Direct Appr ...
- Spark Streaming源码解读之生成全生命周期彻底研究与思考
本期内容 : DStream与RDD关系彻底研究 Streaming中RDD的生成彻底研究 问题的提出 : 1. RDD是怎么生成的,依靠什么生成 2.执行时是否与Spark Core上的RDD执行有 ...
- 16.Spark Streaming源码解读之数据清理机制解析
原创文章,转载请注明:转载自 听风居士博客(http://www.cnblogs.com/zhouyf/) 本期内容: 一.Spark Streaming 数据清理总览 二.Spark Streami ...
- Spark Streaming源码解读之数据清理内幕彻底解密
本期内容 : Spark Streaming数据清理原理和现象 Spark Streaming数据清理代码解析 Spark Streaming一直在运行的,在计算的过程中会不断的产生RDD ,如每秒钟 ...
- Spark Streaming源码解读之Receiver生成全生命周期彻底研究和思考
本期内容 : Receiver启动的方式设想 Receiver启动源码彻底分析 多个输入源输入启动,Receiver启动失败,只要我们的集群存在就希望Receiver启动成功,运行过程中基于每个Tea ...
- Spark Streaming源码解读之Job动态生成和深度思考
本期内容 : Spark Streaming Job生成深度思考 Spark Streaming Job生成源码解析 Spark Core中的Job就是一个运行的作业,就是具体做的某一件事,这里的JO ...
随机推荐
- OC之160728
NSData与NSMutableData:代表数据缓冲区有两个作用,将数据读入NSData和输出NSData数据 输出 将字符串写入指定文件 用NSFileManager:为创建,删除,移动,复制文件 ...
- ssential Diagram for Windows FormsC#/winForm类似visio的拓扑图节点连线控件免费下载
Essential Diagram for Windows Forms是一款可扩展的.高性能的.NET平台下的拓扑图控件,可用于开发像Microsoft Visio一样的交互式地绘图和图解应用程序,在 ...
- JavaScript中__proto__与prototype的关系
一.所有构造器/函数的__proto__都指向Function.prototype,它是一个空函数(Empty function) 1 2 3 4 5 6 7 8 9 Number.__proto__ ...
- 巧用TexturePacker命令行
游戏开发使用TexturePacker来生成图片的atlas sheet, 工具非常好用. 一般GUI的方法, 新建一个tps文件, 将要图片加载进来,调整参数和输出路径, 最后点publish. 在 ...
- HDFS介绍
一.HDFS概述 1.HDFS设计思想来源于Google的GFS,是GFS的开源实现. 2.HDFS要解决的问题: -存储超大文件,比如TB级别 -防止文件丢失. 3.HDFS的特点 -可以存储超大文 ...
- Qt之阴影边框(转)
原文地址:http://blog.sina.com.cn/s/blog_a6fb6cc90101eoc7.html 阴影边框很常见,诸如360以及其他很多软件都有类似效果,了解CSS3的同学们应该都知 ...
- web.xml 详细介绍(转)
web.xml 详细介绍 1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧 ...
- 【线性代数】 06 - Jordan标准型
现在就来研究将空间分割为不变子空间的方法,最困难的是我们还不知道从哪里着手.你可能想到从循环子空间出发,一块一块地进行分割,但这个方案的存在性和唯一性都不能解决.不变子空间分割不仅要求每个子空间\(V ...
- MySQL各逻辑模块工作配合
在了解了MySQL的各个模块之后(点击查看MySQL各个逻辑模块),我们再看看MySQL各个模块间是如何相互协同工作的.接下来,我们通过启动MySQL,客户端连接,请求query,得到返回结果,到最后 ...
- java空指针异常 for循环时,使用了值为null的变量
错误代码: for(Map<String,Object> videoItemMap:learnVideoList){ String videoStuId=MapUtils.getStrin ...