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,从而取到数据

  • 相关阅读:
    1203 forms组件
    1128 聚合查询 orm字段及属性
    1127 模型层orm表操作
    1126 视图层与模板层
    1122 django中orm操作
    1121 Django操作
    1125 视图层
    搭建并行开发环境MPICH2
    Linpack之HPL测试 (HPL Benchmark)
    安装NetCDF及HDF5
  • 原文地址:https://www.cnblogs.com/fxjwind/p/3586972.html
Copyright © 2011-2022 走看看