Spark Streaming揭秘 Day14

State状态管理

今天让我们进入下SparkStreaming的一个非常好用的功能,也就State相关的操作。State是SparkStreaming中用来管理历史数据的结构。目前主要提供了updateStateByKey和MapWithStateRDD两个方法。

updateStateByKey

首先,让我们先找一下这个方法的位置。

我们可以发现updateStateByKey这个方法并不在DStream中,而是在PairDStreamFunctions中。

为什么在不同类中的方法可以组合起来,这个就不得不提一下scala中非常厉害的隐式转换特性,在如下部分,希望大家能深入研究下。

从方法的位置,我们可以很明确的知道这个方法必须是针对keyValue结构的。

进入到方法内部,我们首先看到其使用到了defaultPartitoner,默认是采用HashPartitioner,特点是效率高。

下面进入计算的关键代码,也就是StateDStream中的compute方法。

从上述的计算逻辑中,我们会发现一个明显的弱点:其核心逻辑是一个cogroup,具体来说是在每次计算时,都按照key对所有数据进行扫描和集合。好处是逻辑简单,坏处是有性能问题,每次多要全部重新扫描下,随着数据量越来越大,性能会越来越低,所以不能常使用。
所以这个方法主要针对小数据集的处理方法,关于这个效率问题有没有解决方法,我们看看下一个方法。

mapWithState

这个方法在目前还是试验状态,有可能不稳定,但其设计理念让人眼前一亮,让我们先看一下方法说明。

可以看到,在方法中,对state提供了增删改查等操作,也就是,可以把state与一个keyValue内存数据表等价。具体是如何实现的呢?

首先,进入方法定义,可以看到在操作时把存储级别定为了内存存储,这个和前面内存表的推断一致。

进一步深入,发现,每个partition被一个MapWithStateRDDRecord代表,在计算时调用了如下框出的方法。

对于updateRecordWithData这个方法,主要分为了两个步骤:

步骤一:内存表newStateMap建立,主要是采用copy方法,建立一张已纳入历史数据的内存表。

步骤二:根据当前Batch的数据进行计算,并更新newStateMap的数据,

从这个计算逻辑我们可以看,相比于第一个方法updateStateByKey,mapWithState的操作是增量的!!!这个效率会高很多。

进一步讲,mapWithState方法给我们上了生动的一课。说明通过封装,在partition不变的情况下,实现了对RDD内部数据的更新。
也就是说,对于Spark来说,不可变的RDD也可以处理变化的数据!!!

欲知后事如何,且听下回分解

DT大数据每天晚上20:00YY频道现场授课频道68917580

转载于:https://www.cnblogs.com/dt-zhw/p/5532845.html

Spark Streaming揭秘 Day14 State状态管理相关推荐

  1. Spark Streaming揭秘 Day13 数据安全容错(Driver篇)

    Spark Streaming揭秘 Day13 数据安全容错(Driver篇) 书接上回,首先我们要考虑的是在Driver层面,有哪些东西需要维持状态,只有在需要维持状态的情况下才需要容错,总的来说, ...

  2. 1.15.Flink state(状态)管理与恢复、什么是state、Keyed State、Operator State、状态容错(生成快照,恢复快照),checkPoint简介,重启策略等

    1.15.Flink state(状态)管理与恢复 1.15.1.什么是state 1.15.2.状态(State) 1.15.3.Keyed State 1.15.4.Operator State ...

  3. Spark Streaming揭秘 Day16 数据清理机制

    Spark Streaming揭秘 Day16 数据清理机制 今天主要来讲下Spark的数据清理机制,我们都知道,Spark是运行在jvm上的,虽然jvm本身就有对象的自动回收工作,但是,如果自己不进 ...

  4. Spark Streaming揭秘 Day9 从Receiver的设计到Spark框架的扩展

    Spark Streaming揭秘 Day9 从Receiver的设计到Spark框架的扩展 Receiver是SparkStreaming的输入数据来源,从对Receiver整个生命周期的设计,我们 ...

  5. Flink教程(13) Keyed State状态管理之ValueState的使用 温差报警

    Keyed State状态管理之ValueState的使用 温差报警 系列文章 一.ValueState的方法 二.实验案例 1. 温度Bean 2. 将字符串映射成SensorRecord对象 3. ...

  6. Flutter漫说:组件生命周期、State状态管理及局部重绘的实现(Inherit)

    目录 生命周期 State改变时组件如何刷新 InheritedWidget InheritedModel InheritedNotifier Notifier 生命周期 flutter的生命周期其实 ...

  7. Spark 定制版:015~Spark Streaming源码解读之No Receivers彻底思考

    本讲内容: a. Direct Acess b. Kafka 注:本讲内容基于Spark 1.6.1版本(在2016年5月来说是Spark最新版本)讲解. 上节回顾 上一讲中,我们讲Spark Str ...

  8. 用 Flink 取代 Spark Streaming,知乎实时数仓架构演进【推荐】

    "数据智能" (Data Intelligence) 有一个必须且基础的环节,就是数据仓库的建设,同时,数据仓库也是公司数据发展到一定规模后必然会提供的一种基础服务.从智能商业的角 ...

  9. 用Flink取代Spark Streaming!知乎实时数仓架构演进

    作者 | 知乎数据工程团队 "数据智能" (Data Intelligence) 有一个必须且基础的环节,就是数据仓库的建设,同时,数据仓库也是公司数据发展到一定规模后必然会提供的 ...

最新文章

  1. 开源交换需新框架 技术团队也待整合
  2. R语言rev函数对数据对象(向量、dataframe通过行或者列)反序实战
  3. KeyedVectors python 从词向量文件中快速生成{词:词向量}
  4. 转自CSDNattilax的专栏 :自适应网页设计 跟 响应式 设计的区别跟原理and实践总结...
  5. python做的项目管理软件_幽雅的使用Python之软件管理
  6. 战斗民族开源神器。ClickHouse为什么能够征服各个大厂?
  7. SAP UI5 应用开发教程之四十一 - Chrome 扩展 UI5 Inspector 的离线安装和使用方法
  8. mint java_Oracle Java 12 (JDK 12)在Ubuntu、Linux Mint或Debian(使用PPA)安装配置
  9. 数码相机专业术语解答
  10. 关于折半查找的细节思考
  11. 什么叫python脚本_什么是python的自省
  12. 项目设计报告可行性分析
  13. VMware Workstation的彻底清除 与 VMware Workstation下载安装图文教程
  14. 38、生鲜电商平台-会员积分系统的设计与架构
  15. SCU4438 Censor(审查员) (KMP算法与模拟栈的应用 || HASH表与模拟栈的结合)
  16. 职业作秀V1.7.9更新公告
  17. 【js原生调用Node.js】使用spawn如果cwd不存在会报错
  18. 计算机网络背诵笔记,震惊!网络搜索、数字笔记和云盘,让你变笨!!!
  19. iptables四表五链
  20. java php 时间戳转日期_java时间戳转php时间戳

热门文章

  1. Power over Ethernet or PoE - 以太网供电
  2. 中国垃圾车产业运营模式分析及未来需求预测报告2021年版
  3. Coping With Labor Scarcity in Information Technology: Strategies and Practices for Effective Recruit
  4. 使用等价类划分法和边界值分析法设计出学生成绩的测试用例
  5. 基于QT的猜数字小游戏
  6. 华为交换机DHCP配置
  7. 三菱m70 通信协议_三菱M70(参数表)
  8. Word处理控件Aspose.Words功能演示:使用 C++ 以编程方式将 Word 转换为 HTML 、MHTML
  9. 电机一启动或负载电流瞬间增大,电源输出电压就下降,欠压,随后又恢复正常
  10. 苹果是否有能力再造一个企业级App Store?