zoukankan      html  css  js  c++  java
  • 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,从而取到数据

  • 相关阅读:
    Cheatsheet: 2013 08.14 ~ 08.19
    Cheatsheet: 2013 08.01 ~ 08.13
    Cheatsheet: 2013 07.21 ~ 07.31
    Cheatsheet: 2013 07.09 ~ 07.20
    Cheatsheet: 2013 07.01 ~ 07.08
    Cheatsheet: 2013 06.23 ~ 06.30, Farewell GoogleReader(2008.07.20~2013.06.30)
    Cheatsheet: 2013 06.01 ~ 06.22
    mysql数据库备份参数
    css3 显示一行内容,多余的以省略号显示
    NPM install -save 和 -save-dev
  • 原文地址:https://www.cnblogs.com/fxjwind/p/3586972.html
Copyright © 2011-2022 走看看