zoukankan      html  css  js  c++  java
  • Spark Streaming源码解读之Driver中ReceiverTracker架构设计以具体实现彻底研究

    本期内容 :

    • 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 : 外部通信体或者代表者。

  • 相关阅读:
    JavaScript--事件绑定及深入(26)
    JavaScript--事件对象(25)
    JavaScript--事件入门(24)
    JavaScript--动态加载脚本和样式(23)
    JavaScript--DOM元素尺寸和位置(22)
    JavaScript--DOM操作表格及样式(21)
    JavaScript--DOM进阶(20)
    jQuery-瀑布流的取巧做法分享
    Less开发指南(二)- 基本语法
    less开发指南(一)- 小牛试刀
  • 原文地址:https://www.cnblogs.com/yinpin2011/p/5522133.html
Copyright © 2011-2022 走看看