Spark Streaming源码解读之State管理之UpdataStateByKey和MapWithState解密

本期内容 :

  • UpdateStateByKey解密
  • MapWithState解密

  

  Spark Streaming是实现State状态管理因素:

  01、 Spark Streaming是按照整个BachDuration划分Job的,每个BachDuration都会产生一个Job,为了符合业务操作的需求,

    需要计算过去一个小时或者一周的数据,但是由于数据量大于BachDuration,此时不可避免的需要进行状态维护

  02、 Spark 的状态管理其实有很多函数,比较典型的有类似的UpdateStateByKey、MapWithState方法来完成核心的步骤

  

一、 UPdateStateByKey :

  在已有历史数据中的状态进行更新,具体怎么更新就取决于UPdateFunc函数进行操作,返回一个DSteam类型

  

  

  

  最终还是使用DSteam操作的,会不断的产生数据

    

  生成RDD的过程,计算方法

    

  对传入的数据,通过K对所有数据进行集合:

    优点: 每次都需要对RDD进行计算,确实需要对RDD进行计算,RDD怎么算,就对其进行Cogroup

    缺点: 性能问题,因为需要每一次都要对所有数据进行扫描,最终变成CogroupedRDD,随着数据量的增加速度也越慢

  

  

二、 MapWithState :

    返回的是DStreams的时候,进行状态更新与维护历史状态是基于K进行的,具体更新的函数、超时时间、初始状态等都是由StateSpec(封装了更新函数)进行获取、

  更新、删除,相当于记录在一张表中,对表中的哪个Key进行操作使用历史数据,State是表名称或者索引,获取、更新数据,维护状态。

  

  

  

  

  所有的Partition都是由MapWithStateRDDRecord所代表的,数据结构是StateMap ,维护的是基于K的状态

  

  

  

  

    备注:

    • 资料来源于:王家林(Spark发行版本定制)
    • 新浪微博:http://www.weibo.com/ilovepains
时间: 2024-10-09 05:36:51

Spark Streaming源码解读之State管理之UpdataStateByKey和MapWithState解密的相关文章

(版本定制)第14课:Spark Streaming源码解读之State管理之updateStateByKey和mapWithState解密

本期内容: 1.updateStateByKey解密 2.mapWithState解密 背景:整个Spark Streaming是按照Batch Duractions划分Job的.但是很多时候我们需要算过去的一天甚至一周的数据,这个时候不可避免的要进行状态管理,而Spark Streaming每个Batch Duractions都会产生一个Job,Job里面都是RDD, 所以此时面临的问题就是怎么对状态进行维护?这个时候就需要借助updateStateByKey和mapWithState方法完成

第14课:Spark Streaming源码解读之State管理之updateStateByKey和mapWithState解密

什么是state(状态)管理?我们以wordcount为例.每个batchInterval会计算当前batch的单词计数,那如果需要单词计数一直的累加下去,该如何实现呢?SparkStreaming提供了两种方法:updateStateByKey和mapWithState .mapWithState 是1.6版本新增功能,目前属于实验阶段.mapWithState具官方说性能较updateStateByKey提升10倍.那么我们来看看他们到底是如何实现的. 代码示例如下: object Upda

Spark 定制版:009~Spark Streaming源码解读之Receiver在Driver的精妙实现全生命周期彻底研究和思考

本讲内容: a. Receiver启动的方式设想 b. Receiver启动源码彻底分析 注:本讲内容基于Spark 1.6.1版本(在2016年5月来说是Spark最新版本)讲解. 上节回顾 上一讲中,我们给大家具体分析了RDD的物理生成和逻辑生成过程,彻底明白DStream和RDD之间的关系,及其内部其他有关类的具体依赖等信息: a. DStream是RDD的模板,其内部generatedRDDs 保存了每个BatchDuration时间生成的RDD对象实例.DStream的依赖构成了RDD

Spark发行版笔记10:Spark Streaming源码解读之流数据不断接收和全生命周期彻底研究和思考

本节的主要内容: 一.数据接受架构和设计模式 二.接受数据的源码解读 Spark Streaming不断持续的接收数据,具有Receiver的Spark 应用程序的考虑. Receiver和Driver在不同进程,Receiver接收数据后要不断给Deriver汇报. 因为Driver负责调度,Receiver接收的数据如果不汇报给Deriver,Deriver调度时不会把接收的数据计算入调度系统中(如:数据ID,Block分片). 思考Spark Streaming接收数据: 不断有循环器接收

Spark Streaming源码解读之Job动态生成和深度思考

本博文主要包含以下内容: 1. Spark Streaming Job 生成深度思考 2 .Spark Streaming Job 生成源码解析 一 :Spark Streaming Job 生成深度思考 输入的DStream有很多来源Kafka.Socket.Flume,输出的DStream其实是逻辑级别的Action,是Spark Streaming框架提出的,其底层翻译成为物理级别的Action,是RDD的Action,中间是处理过程是transformations,状态转换也就是业务处理

Spark Streaming源码解读之Job详解

一:Spark Streaming Job生成深度思考 1. 做大数据例如Hadoop,Spark等,如果不是流处理的话,一般会有定时任务.例如10分钟触发一次,1个小时触发一次,这就是做流处理的感觉,一切不是流处理,或者与流处理无关的数据都将是没有价值的数据,以前做批处理的时候其实也是隐形的在做流处理. 2. JobGenerator构造的时候有一个核心的参数是jobScheduler, jobScheduler是整个作业的生成和提交给集群的核心,JobGenerator会基于DStream生

15、Spark Streaming源码解读之No Receivers彻底思考

在前几期文章里讲了带Receiver的Spark Streaming 应用的相关源码解读,但是现在开发Spark Streaming的应用越来越多的采用No Receivers(Direct Approach)的方式,No Receiver的方式的优势: 1. 更强的控制自由度 2. 语义一致性 其实No Receivers的方式更符合我们读取数据,操作数据的思路的.因为Spark 本身是一个计算框架,他底层会有数据来源,如果没有Receivers,我们直接操作数据来源,这其实是一种更自然的方式

第15课:Spark Streaming源码解读之No Receivers彻底思考

本期内容: Direct Access Kafka 前面有几期我们讲了带Receiver的Spark Streaming 应用的相关源码解读.但是现在开发Spark Streaming的应用越来越多的采用No Receivers(Direct Approach)的方式,No Receiver的方式的优势: 1. 更强的控制自由度 2. 语义一致性 其实No Receivers的方式更符合我们读取数据,操作数据的思路的.因为Spark 本身是一个计算框架,他底层会有数据来源,如果没有Receive

Spark 定制版:007~Spark Streaming源码解读之JobScheduler内幕实现和深度思考

本讲内容: a. JobScheduler内幕实现 b. JobScheduler深度思考 注:本讲内容基于Spark 1.6.1版本(在2016年5月来说是Spark最新版本)讲解. 上节回顾 上节课,我们以JobGenerator类为重心,为大家左右延伸,解密Job之动态生成:并总结出了Job之动态生成的三大核心: a. JobGenerator: 负责Job生成 b. JobSheduler:负责Job调度 c. ReceiverTracker:获取元数据 如Job动态生成图: 开讲 由上