本期内容 :

  • 数据接收架构设计模式
  • 数据接收源码彻底研究

一、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源码解读之流数据不断接收全生命周期彻底研究和思考的更多相关文章

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

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

  2. 9. Spark Streaming技术内幕 : Receiver在Driver的精妙实现全生命周期彻底研究和思考

        原创文章,转载请注明:转载自 听风居士博客(http://www.cnblogs.com/zhouyf/)       Spark streaming 程序需要不断接收新数据,然后进行业务逻辑 ...

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

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

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

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

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

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

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

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

  7. Spark Streaming源码解读之数据清理内幕彻底解密

    本期内容 : Spark Streaming数据清理原理和现象 Spark Streaming数据清理代码解析 Spark Streaming一直在运行的,在计算的过程中会不断的产生RDD ,如每秒钟 ...

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

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

  9. Spark Streaming源码解读之Job动态生成和深度思考

    本期内容 : Spark Streaming Job生成深度思考 Spark Streaming Job生成源码解析 Spark Core中的Job就是一个运行的作业,就是具体做的某一件事,这里的JO ...

随机推荐

  1. JavaScript基础--小案例:在网页指定位置弹出错误信息(十二)

    案例分析:点击按钮后,在网页上指定区域,提示错误信息!5秒后,错误信息提示自动消失! <script languag="javascript" type="text ...

  2. mysql、pymysql、SQLAlchemy

    1.MySQL介绍 http://www.cnblogs.com/wupeiqi/articles/5699254.html,基础操作参见此文章,此处不赘述. 安装:yum install mysql ...

  3. Python OpenCV —— Arithmetic

    图案的算术操作. # -*- coding: utf-8 -*- """ Created on Wed Sep 28 11:54:47 2016 @author: Adm ...

  4. Android 布局优化

    转载自stormzhang的博客:http://stormzhang.com/android/2014/04/10/android-optimize-layout/ < include /> ...

  5. logback配置错误邮件发送

    配置logback发送error级别日志到指定邮箱 需要导入jar包:janino.jar <property name="smtpHost" value="smt ...

  6. SQL 经典练习题

    create database 练习题gouse 练习题go create table Student( Sno char(3) primary key, Sname char(8) not null ...

  7. windows python3.2 shell环境(python叫做解释器)

    [进入python的shell 环境:](python里称作命令解释器,windows叫做cmd,unix叫做shell) cmd  输入set path=%path%;e:\python2.7然后输 ...

  8. Java配置环境变量

    首先,你应该已经安装了Java 的 JDK 了,笔者安装的是:jdk-7u7-windows-x64 接下来主要讲怎么配置 Java 的环境变量 1.进入“计算机”的“属性”选项后如图 2.选择“高级 ...

  9. oracle不能删除,查看引用的外键

    例如我在删除scorm_course_info表中的某条数据时,会报已经找到子目录的错误,说明有另外的表B的某列b1外键引用了它,找到表B的b1列,可以通过如下的sql: select b.table ...

  10. 使用as3控制动画

    1.建立按钮元件 2.在属性面板使用英文为按钮元件命名,例如playButton 3.建立函数,例如 function startMovie(event:MouseEvent):void {  thi ...