• Spark Streaming源码分析 – InputDStream


    对于NetworkInputDStream而言,其实不是真正的流方式,将数据读出来后不是直接去处理,而是先写到blocks中,后面的RDD再从blocks中读取数据继续处理
    这就是一个将stream离散化的过程
    NetworkInputDStream就是封装了将数据从source中读出来,然后放到blocks里面去的逻辑(Receiver线程)
    还需要一个可以管理NetworkInputDStream,以及把NetworkInputDStream.Receiver部署到集群上执行的角色,这个就是NetworkInputTracker
    NetworkInputTracker会负责执行一个独立的job,把各个Receiver以RDD的task的形式,分布到各个worknode上去执行

    InputDStream

     

    NetworkInputDStream

    NetworkInputDStream是比较典型的Input,主要接口两个
    getReceiver,Receiver对于NetworkInputDStream是最关键的,里面封装了如果从数据源读到数据,如果切分并写到blocks中去
    compute,由于Receiver只会把数据写到blocks中去,问题我们如何取到这些数据了?
    Receiver在写block的同时,会发event给networkInputTracker注册block
    所以NetworkInputDStream.compute是无法直接算出数据来,而是先从networkInputTracker查询出blockids,并从BlockManager中读出数据


    NetworkReceiver

    NetworkReceiverActor
    用于将Receiver的event转发给TrackerActor

    BlockGenerator
    3个关键的接口,
    +=,用于调用者将数据不断加到currentBuffer上
    updateCurrentBuffer,定时将currentBuffer的数据,生成block对象放到blocksForPushing队列上(blockIntervalTimer调用)
    keepPushingBlocks, 不断将
    blocksForPushing队列上的blocks取出,并写到blockmanager中去(blockPushingThread调用)

     

    SocketInputDStream

    Socket作为最为典型的NetworkInputDStream,看看是如何实现的
    对于SocketInputDStream,关键实现getReceiver接口,可以获取SocketReceiver对象
    而对于SocketReceiver关键是实现onStart接口,将从socket上读到的数据写到blockGenerator的currentBuffer上

    NetworkInputTracker

    NetworkInputTracker用于管理和监控所有的NetworkInputDStream
    首先NetworkInputTrackerActor,可以从NetworkInputDStream接收RegisterReceiver,AddBlocks,和DeregisterReceiver事件
    从而知道有多少NetworkInputDStream,并且每个读取并存储了多少的blocks

    再者,在ReceiverExecutor中他负责启动所有NetworkInputDStream的Receivers,做法比较奇特,也是依赖于RDD
    将每个receiver封装在RDD的一个partition里,partition会作为一个task被调度,最后runjob去执行startReceiver,这样每个receiver都会在task被执行的时候start

    而外部通过getBlockIds,来取得某NetworkInputDStream所有的blockids,从而取到数据

  • 相关阅读:
    【BZOJ2384】[Ceoi2011]Match KMP
    【BZOJ2482】[Spoj1557] Can you answer these queries II 线段树
    【BZOJ2506】calc 分段+vector+莫队
    【BZOJ2600】[Ioi2011]ricehub 双指针法
    【BZOJ4898】[Apio2017]商旅 分数规划+SPFA
    【BZOJ4417】[Shoi2013]超级跳马 矩阵乘法
    【BZOJ2707】[SDOI2012]走迷宫 Tarjan+拓扑排序+高斯消元+期望
    【BZOJ2730】[HNOI2012]矿场搭建 Tarjan
    【BZOJ4987】Tree 树形DP
    【BZOJ3502/2288】PA2012 Tanie linie/【POJ Challenge】生日礼物 堆+链表(模拟费用流)
  • 原文地址:https://www.cnblogs.com/fxjwind/p/3586972.html
Copyright © 2020-2023  润新知