本期内容 :

  • ReceiverTracker的架构设计
  • 消息循环系统
  • ReceiverTracker具体实现

一、 ReceiverTracker的架构设计

  1、 ReceiverTracker可以以Driver中的具体自己的算法来在具体的Execute中启动Receiver,启动Receiver的方式会把每个Receiver都封装成为一个Tracker,

 Tracker是这个Job中唯一的Tracker,实质上讲ReceiverTracker启动Receiver的方式就是封装成一个个Job ,有多少个Job就会启动多少个Receiver ,或者是有

 多少Receiver就会分发多少个Job ,每个Job里一个Tracker ,Tracker里面就一条数据就是这个Receiver的数据。

  2、 ReceiverTracker在启动Receiver时它有一个ReceiverSupervisor ,ReceiverSupervisorlMpl作为自己的实现,实际上ReceiverSupervisor它自己在启动

 的时候转过来会帮我们启动Receiver ,Receiver会不断的接收数据转过来会通过BlockGenerator会生成一个个的Block ,加上定时器就会不断的存储数据,存储

 数据有两种,一通过BlockMessage ,二先写日志WAL的方式,存储过后ReceiverSupervisorlMPL会把存储的数据的源数据 会汇报给ReceiverTracker ,实质上

 是汇报给ReceiverTrackerRPC通信消息实体,ReceiverTracker通过RPC接收到数据之后转过来就会准备下一步的数据管理工作。

  

二、  ReceiverTracker具体实现

  ReceiverTracker接收到数据后怎么具体怎么进行处理 :

    

  存储数据且汇报给Driver:

    

  ReceivedBlockInfo :

    

    

    

    

  ReceiverTracker 作为RPC消息循环体,来接收Receiver的消息,管理整个Receiver的执行,Receiver的启动、回收、执行过程中的数据管理,及包含重新启动。

    

  这些消息是完成Receiver与ReceiverTracker消息沟通的。

    

    

   确定所有的输入流,需要所有的输入流来启动。

    

    

    

    GetReceivedBlockQueue: 是Streaming对应Block接收到的Block ,这边是HashMap可以有很多的输入流,不同的输入流可以彼此独立的没有什么关系的,

  从Driver的角度讲我们作为一个更大的HashMap的集合,后面接收到的数据进行处理。

    

    

   会跟踪所有接收到的Block ,并且根据需要把接收到的Receiver的Blocks 分配给我们的Batches,根据需要的时间,对数据进行分配当前执行的作业

    

   

 

三、 消息通信体

   StartAllReceivers : 启动所有的Receiver

    

    

    

  UpdateReceiverRateLimit : ReceiverTracker 他可以动态的调整Receiver接收的Limit

    

    

    

    

    

    

  总结 :

    1、Receiver接收的数据合并并存储数据后ReceiverSupervisorlMpl的数据及源数据汇报给我们的ReceiverTracker

    2、ReceiverTracker接收源数据汇报的其实是内部RPC消息通信体,接收数据的内部其实有一个ReceivedBlockTracker进行接收数据的分配

    3、JobGenerator会将每个Bach作为时间窗口,工作的时候根据源数据信息ReceiverTracker中获取相应的源数据信息生成RDD

    4、ReceivedBlockTracker管理整个Block的源数据信息,但是作为内部的一个管理对象

    如果从设计的模式讲,ReceiverTracker与ReceiverBlockTracker ,或者说我们的RPC通信对象和ReceiverBlockTracker他们的设计模式是门面(Facet)设计模式:

    ReceiverBlockTracker :内部做事情的

    ReceiverTracker : 外部通信体或者代表者。

转载于:https://www.cnblogs.com/yinpin2011/p/5522133.html

Spark Streaming源码解读之Driver中ReceiverTracker架构设计以具体实现彻底研究相关推荐

  1. 第14课:Spark Streaming源码解读之State管理之updateStateByKey和mapWithState解密

    第14课:Spark Streaming源码解读之State管理之updateStateByKey和mapWithState解密 /* 王家林老师授课http://weibo.com/ilovepai ...

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

    特别说明:  在上一遍文章中有详细的叙述Receiver启动的过程,如果不清楚的朋友,请您查看上一篇博客,这里我们就基于上篇的结论,继续往下说. 博文的目标是:  Spark Streaming在接收 ...

  3. Spark 定制版:015~Spark Streaming源码解读之No Receivers彻底思考

    本讲内容: a. Direct Acess b. Kafka 注:本讲内容基于Spark 1.6.1版本(在2016年5月来说是Spark最新版本)讲解. 上节回顾 上一讲中,我们讲Spark Str ...

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

    本期内容 : Direct Acess Kafka Spark Streaming接收数据现在支持的两种方式: 01. Receiver的方式来接收数据,及输入数据的控制 02. No Receive ...

  5. 第15课:Spark Streaming源码解读之No Receivers彻底思考

    通常我们使用kafka direct的方式使用的是没有自定offset的构造函数 val kc = new KafkaCluster(kafkaParams) 完完全全就是kafka的操作了 我们看看 ...

  6. Streaming源码解读之接收流数据的全生命周期

    2019独角兽企业重金招聘Python工程师标准>>> 上一课我们讲解了Receiver启动的流程.Receiver是通过ReceiverSupervisor的start方法启动的: ...

  7. Spark Streaming源码分析 – DStream

    A Discretized Stream (DStream), the basic abstraction in Spark Streaming, is a continuous sequence o ...

  8. Spark Streaming 源码详解

    原地址 本系列内容适用范围:* 2015.12.05 update, Spark 1.6 全系列 √ (1.6.0-preview,尚未正式发布) * 2015.11.09 update, Spark ...

  9. Spark Streaming源码阅读(0)楔子

    本篇文章主要是引出作者阅读源码的主要原因: 主要原因就是最近前端和后端BUG都写的太多了,老大无路可走,强心干预我进行项目开发,所以就派了个阅读源码的活交给我,想让我学懂了以后进行分享,基于感恩心理, ...

最新文章

  1. [kuangbin带你飞]专题四 最短路练习 B( POJ 2253) Frogger(spfa)
  2. MySQL mysqldump命令
  3. 第一篇博客文章,hello world及编码
  4. mysql sphinx windows安装_Sphinx在windows下安装使用[支持中文全文检索]
  5. java api 开发_Java开发人员应该知道的前20个库和API
  6. flash软件视频不能测试,360安全卫士解决视频播放错误怎么办?无法调出flash解决办法...
  7. eclipse mysql jndi_Java开发网 - tomcat5配置jndi的问题 (jdbc:comp is not bound in this Context)...
  8. arxiv.org经常打不开真是让人头大
  9. js实现网页跳转脚本
  10. 在Redis集群技术上,你不可错过的四大集成者
  11. Named Return Value Optimization (具名返回值优化)
  12. 遗传算法求解tsp问题 C语言,遗传算法解决TSP问题(C++)
  13. 软件测试笔记本硬件,专业工作站软件测试_惠普笔记本电脑_笔记本评测-中关村在线...
  14. 五个拿来就能用的炫酷登录页面
  15. 使用protobuf_example_addressbook.proto项目时的问题:PROTOBUF_USE_DLLS
  16. linux分区btrfs,Linux文件系统之btrfs
  17. HTML+CSS+JS网页设计与制作期末大作业:网站——宏源山庄
  18. 概率论由相关性求数学期望和方差的公式_概率论与数理统计(马涛)第4章——数学期望与方差.ppt...
  19. 项目总结,彻底掌握如何在NodeJs中使用Sequelize
  20. Unity3D-游戏场景优化之遮挡剔除(Occlusion Culling)的使用

热门文章

  1. 耐克人脸识别_狄耐克智能交通再结一位“老铁”——与力高地产达成战略合作协议!...
  2. imageJ 如何下载plugin_如何给微服务架构的项目做验收测试?
  3. ubuntu服务器系统不识别,U盘安装16.04server版 安装好后重启 无法进入系统
  4. vscode设置go环境
  5. Linux系统根据端口号查找项目路径
  6. 读写分离oracle redis,redis集群主从之读写分离
  7. 版本控制系统(SVN,Git)与项目托管平台(Github,Gitee,Coding)
  8. 【CCCC】L2-022 重排链表 (25分),,链表遍历
  9. 【codevs1231】最优布线问题
  10. 【codevs1004】四子连棋