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接收到数据后怎么具体怎么进行处理 :

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

  存储数据且汇报给Driver:

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

  ReceivedBlockInfo :

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

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

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

    

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

三、 消息通信体

   StartAllReceivers : 启动所有的Receiver

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

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

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

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

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

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

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

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

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

    

  总结 :

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

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

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

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

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

    ReceiverBlockTracker :内部做事情的

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

上一篇:Java中的Volatile和synchronized的区别


下一篇:cordova