zoukankan      html  css  js  c++  java
  • SparkStreaming-运行架构

    SparkStreaming-运行架构

    SparkStreaming相对其他流处理系统最大的优势在于流处理引擎和数据处理在同一个软件栈,其中SparkStreaming功能主要包括流处理引擎的流数据接收与存储以及批处理作业的生成与管理,而spark核心负责处理SparkStreaming发送过来的作业。SparkStreaming分为Driver端和Client端。

    运行在Driver端为StreamingContext实例。StreamingContext实例包括DSteamGraphJobScheduler(包括ReceiverTrackerJobGenerator)

    运行在Client端为ReciverSupervisorReciver等。

    SparkStreaming进行流数据处理大致可以分为:

    1.启动流处理引擎

    2.接收及存储流数据

    3.处理流数据

    4.输出处理结果

    如下图所示:

     

    详解:

    (1).初始化StreamingContext对象,在该对象启动过程中实例化DStreamGraphJobScheduler

    DStreamGraph用于存放DStream以及DStream之间的依赖关系等信息。

    JobScheduler中包括ReceiverTrackerJobGeneratorReceiverTrackerDriver端流数据接收器(Receiver)的管理者;JobGenerator为批处理作业生成器。

    ReceiverTracker启动过程中,根据流数据接收器分发策略通知对应的Executor中的流数据接收管理器(ReciverSupervisor)启动,再由ReciverSupervisor启动流数据接收器。

    (2).当流数据接收器Receiver启动后,持续不断地接收实时流数据,根据传过来数据的大小进行判断,如果数据量很小,则攒多条数据成一块,然后再进行块存储;如果数据量大,则直接进行块存储。

    对于这些数据Receiver直接交到ReciverSupervisor,由其进行数据转储操作。块存储根据设置是否预写日志分为两种:

      一种是使用非预写日志BlockManagerBasedBlockHandler方法直接写到Worker的内存或磁盘中

      另一种是进行预写日志WriteAheadLogBasedBlockHandler方法,即在预写日志同时把数据写入到Worker的内存或磁盘中

    数据存储完毕后,ReciverSupervisor会把数据存储的云信息上报给ReceiverTrackerReceiverTracker再把这些信息转发给ReceivedBlockTracker,由它负责管理收到数据块的元信息。

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

    a.通知ReceiverTracker将接收到的数据进行提交,在提交时采用synchronized关键字进行处理,保证每条数据被划入一个且只被划入一个批次中。

    b.要求DStreamGraph根据DStream依赖关系生成作业序列Seq[Job]

    c.从第一步中ReceiverTracker获取本批次数据的元数据。

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

    e.只要提交结束(不管作业是否被执行),SparkStreaming对整个系统做一个检查点(checkpoint

    (4).Spark核心的作业对数据进行处理,处理完毕后输出到外部系统,如数据库或文件系统,输出的数据可以被外部系统所使用。

    由于实时留数据的数据源源不断地流入,Spark会周而复始地进行数据处理,响应也会持续不断地输出结果。

  • 相关阅读:
    vue-router replace 浏览器前进后退记忆栈不记住当前菜单页面
    vue-router active-class 进入当前菜单的样式
    vue-router createWebHashHistory
    浅析如何升级npm及更新npm之后报错(node:15920) ExperimentalWarning: The fs.promises API is experimental 的解决
    浅析nvm介绍、安装与使用以及遇到的问题解决
    npm安装vue-cli报错internal/modules/cjs/loader.js(Error: Cannot find module 'D:Program odejs ode_global ode_modulesvue-cliinvue')
    浅析如何升级vue-cli以及使用npm卸载包时遇到问题:npm ERR! code EEXIST(npm ERR! File exists: D:Program odejs ode_globalvue-list.cmd
    浅析如何实现根据图片自动切换背景色功能:提取图片主题色方案探索
    sync.Pool is much slower than using channel, so why should we use sync.Pool?
    golange benchmark运行
  • 原文地址:https://www.cnblogs.com/EnzoDin/p/13276485.html
Copyright © 2011-2022 走看看