spark-streaming

概述
  • 原生流处理

    • 数据来一条就立即计算一条
    • 代表框架 strom(已淘汰) ,flink
      *
  • 微批次处理

    • 积攒一段时间间隔的数据,再一次对这些微批次数据做处理,间隔 0.5-5秒
      在这里插入图片描述
sparkStreaming数据抽象

sparkStreaming 计算思想

  • sparkstreaming就是微批流处理思想
  • 官方定义Spark Streaming模块: 可以轻松构建可扩展的容错流应用程序
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

Dstream的介绍

  • 回顾,之前的数据抽象
    • sparkCore:RDD
    • sparkSQL:DataFrame,DataSet 底层还是RDD
  • Spark Streaming的核心是DStream,DStream类似于RDD,它实质上一系列的RDD的集合,DStream可以按照秒、分等时间间隔将数据流进行批量的划分。
  • 如下图所示:将流式数据按照【X seconds】划分很多批次Batch,每个Batch数据封装到RDD中进行处理分析,最后每批次数据进行输出。
    在这里插入图片描述
  • 对于目前版本的Spark Streaming而言,其最小的Batch Size的选取在0.5~5秒钟之间,所以Spark Streaming能够满足流式准实时计算场景,对实时性要求非常高的如高频实时交易场景则不太适合。

*DStream代表了一种连续的数据流,要么从某种数据源提取数据,要么从其他数据流映射转换而来。DStream内部是由一系列连续的RDD组成的,每个RDD都包含了特定时间间隔内的一批数据,如下图所示:
在这里插入图片描述

  • DStream本质上是一个:一系列时间上连续的RDD(Seq[RDD]),DStream = Seq[RDD]。

     DStream = Seq[RDD]
     DStream相当于一个序列(集合),里面存储的数据类型为RDD
     (Streaming按照时间间隔划分流式数据)
    
  • 对DStream的数据进行操作也是按照RDD为单位进行的。
    在这里插入图片描述

  • 通过WEB UI界面可知,对DStream调用函数操作,底层就是对RDD进行操作,发现很多时候DStream中函数与RDD中函数一样的。
    在这里插入图片描述

  • DStream中每批次数据RDD在处理时,各个RDD之间存在依赖关系,DStream直间也有依赖关系,RDD具有容错性,那么DStream也具有容错性。
    在这里插入图片描述

  • 上图相关说明:

    • 1、每一个椭圆形表示一个RDD
    • 2、椭圆形中的每个圆形代表一个RDD中的一个Partition分区
    • 3、每一列的多个RDD表示一个DStream(图中有三列所以有三个DStream)
    • 4、每一行最后一个RDD则表示每一个Batch Size所产生的中间结果RDD
  • Spark Streaming将流式计算分解成多个Spark Job,对于每一时间段数据的处理都会经过Spark DAG图分解以及Spark的任务集的调度过程。

DStream Operations

  • DStream类似RDD,里面包含很多函数,进行数据处理和输出操作,主要分为两大类:
    • Transformations:
    • 类似RDD的tranformation,是延迟执行的,只有遇到output算子才会触发
    • 将一个DStream转换为另一个DStream
      • Dstream 有3种操作
        • 第一类:基础函数跟RDD同名,比如 map,flatMap,filter,再额外添加一个新的函数名叫tranform
          在这里插入图片描述
          在这里插入图片描述

          • 如果要做更复杂的计算,比如排序,需要transform方法,在里面对每个RDD处理
            在这里插入图片描述
        • 第二类:跟状态有关的函数:updateStateByKey和mapWithState

        • 第三类:窗口函数:window,reduceByKeyAndWindow

在这里插入图片描述
在这里插入图片描述
Output Operations

  • DStream只有遇到output操作才会触发执行。
  • 主要是将Dstream的数据连续不断的输出
  • 主要有print和foreachRDD,对于复杂的输出操作,可以放在foreachRDD中
    dstream.foreachRDD((rdd)=>{ rdd.更丰富的各种输出操作比如 foreach,或foreachpartition })
    在这里插入图片描述
    在这里插入图片描述
回顾各模块的创建方式
  • SparkCore模块:SparkContext

  • ​SparkSQL模块:SparkSession

  • SparkStreaming模块:StreamingContext

  • streaming StreamingContext(sparkConf,Seconds(2)) //就是每隔多久对流数据进行一次微批划分

  • streaming 的WEB UI 的任务图
    在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值