Spark详解(十三):Spark Streaming 运行架构分析

1. 运行架构

SparkStreaming的主要功能包括流处理引擎的流数据接收与存储以及批处理作业的生成与管理,而Spark核心负责处理Spark Streaming发送过来的作用。Spark Streaming分为Driver端和Client端,运行在Driver端为Streaming Context实例。该实例包括DStreamGraph和JobScheduler(包括ReceiveTracker和JobGenerator)等,而Client包括ReceiveSupervisor和Receiver等。

SparkStreaming进行流数据处理大致上可以分为:启动流处理引擎,接受以及存储流数据、处理流数据和输出处理结果等4个步骤,其运行架构图如下所示:

在这里插入图片描述

(1)初始化StreamContext对象,在该对象启动过程中实例化DStreamGraph和JobScheduler。其中DStreamGraph用于存放DStream之间的依赖关系等信息,而JobScheduler包括ReceiverTracker和JobGenerator。其中ReceiverTracker为Driver端流数据接收器(Recevier)管理者,JobGenerator为批处理作业生成器。在ReceiverTracker启动过程中,根据流数据接收器分发策略通知对应的Executor的流数据接收器管理者(RecevierSupervisor)启动,再由RecevierSupervisor启动流数据接收器Recevier。

(2)当流数据接收器Recevier启动之后,持续不断地接受实时流数据,根据过来的数据的大小判断,如果数据量很小,则赞成多条数据成一块,然后再进行块存储;如果数据量大,则直接进行块存储。对于这些数据Recevier直接交给RecevierSupervisor,由其进行数据存储操作。块存储根据设置是否预写日志分为两种,一种是使用非预写日志BlockManagerBasedBlockHandler方法之间写到Worker内存或者磁盘中,另一种是进行预写日志WriteAheadLogBasedBlockHandler方法,即在预写日志同时把数据写入到Worker的内存或者磁盘中。数据存储完毕之后,RecevierSupervisor会把数据存储的元信息上报给RecevierTracker,RecevierTracker再把这些信息转发给RecevierBlockTracker中,由他负责管理收到的数据块元数据信息。

(3)在StreamingContext中的JobGenerator维护一个定时器,该定时器在批处理时间到来时会进行生成作业的操作。在该操作中进行如下操作:

  1. 通知RecevierTracker将接收到的数据进行提交,在提交时采用synchronized关键字进行处理,保证每条数据划入到一个且只有一个批次中。
  2. 要求DstreamGraph根据DStream依赖关系生成作业序列Seq[Job]
  3. 从第一步RecevierTracker中获取本次批次的元数据。

(4)把批处理时间、作业序列Seq[Job]和本批次的元数据包装成JobSet,调用JobScheduler.submitJobSet(JobSet)提交给JobScheduler,JobScheduler将这些作业发送给SparkCore进行处理,由于该执行为异步执行,因此本步执行速度非常快。

(5)只要提交结束(不管作业是否被执行),Spark Streaming对整个系统做一个检查点(Checkpoint)

(6)在SparkCore的作业对数据进行处理, 处理完毕之后输出到外部系统中,如数据库或文件系统,输出的数据可以被外部使用。由于实时流数据的数据源不断地流入,Spark会周期地进行数据处理,相应也会不断地产生输出结果。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值