第11课:Spark Streaming源码解读之Driver中的ReceiverTracker架构

本期内容:

1, ReceiverTracker的架构设计

2, 消息循环系统

3, ReceiverTracker具体实现

ReceiverTacker类如下,从源码注释可以看出该类的作用。

    管理ReceiverInputDStreams的执行,记录Receiver发来的元数据信息。ReceiverTacker类构造时必须传入StreamingContext对象。

    ReceiverTacker类内部有ReceiverTackerEndpoint这个消息通信体,用于和运行在Executor端的ReceiverSupervisorImpl进行通信,包括Receiver的注册,重启Receiver,清除之前的Block数据,更新限流值,添加Block元数据信息等消息。

    接下来以接收到来自Executor端的ReceiverSupervisorImpl发来添加元数据信息的AddBlock消息,进行讲解具体的处理流程。

        

ReceivedBlockInfo类包含了StreamID,Block中记录条数,元数据Metadata,接收Block的存储结果(BlockID和记录数量)

        

ReceiverBlockTracker类是addBlock方法的具体实现。

        1.调用ReceiverBlockTracker的writeToLog方法

        2.调用ReceiverBlockTracker的getReceivedBlockQueue方法,其中streamIdToUnallocatedBlockQueues为HashMap,Key为StreamID,Value为ReceivedBlockQueue。而ReceivedBlockQueue 的定义为private type ReceivedBlockQueue = mutable.Queue[ReceivedBlockInfo]

        ReceiverBlockTracker类,可以从源码中看出,他会记录所有接收到的Block信息,根据需要把Block分配给Batch。如果设置了checkpoint,开启WAL,则会把所有的操作保存到预写日志中,因此当Driver失败后就可以从checkpoint和WAL中恢复ReceiverTracker的状态。

        ReceiverBlockTracker类中重要的方法,allocateBlocksToBatch。private val timeToAllocatedBlocks = new mutable.HashMap[Time, AllocatedBlocks]存储批处理时刻,分配到的Blocks数据。

        该方法是被ReceiverTracker调用的。

        而ReceiverTracker的allocateBlocksToBatch方法是被JobGenerator的generateJobs方法调用的。

        

ReceiverBlockTracker类中重要的方法,getBlocksOfBatch。

       

 该方法是被ReceiverTracker的getBlocksOfBatch调用。

       

ReceiverTracker的getBlocksOfBatch方法是被ReceiverInputDStream的compute方法调用的。

总结:

Receiver接收到数据,然后合并并存储数据之后,ReceiverSupervisorImpl会把Block的元数据汇报给ReceiverTracker内部的消息通信体ReceiverTrackerEndpoint。

ReceiverTracker接收到Block的元数据信息之后,由ReceivedBlockTracker管理Block的元数据的分配,JobGenerator会将每个Batch,从ReceivedBlockTracker中获取属于该Batch的Block元数据信息来生成RDD。

从设计模式来讲:ReceiverTrackerEndpoint和ReceivedBlockTracker是门面设计模式,内部实际干事情的是ReceivedBlockTracker,外部通信体或者代表者就是ReceiverTrackerEndpoint。

转载于:https://my.oschina.net/u/928448/blog/679307

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值