资讯专栏INFORMATION COLUMN

spark Dstreams-缓存及持久性存储

IT那活儿 / 1291人阅读
spark Dstreams-缓存及持久性存储

点击上方“IT那活儿”,关注后了解更多内容,不管IT什么活儿,干就完了!!!

简  介
与RDD类似,DStreams也允许开发者将其持久化存储到内存中,也就是说对DStream使用persist()方法将自动在内存中持久化数据流的每个RDD,这对于需要多次计算的数据流中的数据将是非常有用的。


Caching/Persistence


对于基于窗口的操作(例如reduceByWindow和reduceByKeyAndWindow)和基于状态操作(例如updateStateByKey)是隐式的,因此基于窗口操作和基于状态操作将自动持久化到内存中,所以无需开发人员显示调用persist()方法。

其他操作是需要开发人员显示指定调用persist()方法进行数据集持久化。

通过网络接收数据的输入流(例如kafka,socket等)默认的存储级别设置是将数据复制到两个节点以实现容错。

请注意,与RDD不同的是数据流的默认持久性存储级别在内存中保持序列化。


Checkpointing


一个streaming的应用程序是7*24小时运行的,因此必须能够适应与程序逻辑无关的故障(例如系统故障,JVM崩溃等)。
为了实现这一点,spark stremaing必须设置足够检查点以便他能够从故障中恢复,检查点有两种类型数据:
1. metadata checkpointing将定义流计算的信息保存到容错存储(如HDFS)。
这用于从运行流应用程序驱动程序的节点的故障中恢复(稍后将详细讨论)。
元数据包括:
  • configuration:用于创建流式处理应用程序的配置。
  • DStream operations:定义流应用程序的一组数据流操作。
  • Incomplete batchs:已排队但尚未完成的批处理。
2. Data checkpointing:将生成的RDD保存到可靠的存储中。
在一些跨多个批处理组合数据的有状态转换中,这是必需的。在这种转换中,生成的RDD依赖于以前批处理的RDD,这导致依赖链的长度随着时间的推移而不断增加。
为了避免恢复时间的无限增长(与依赖链成比例),有状态转换的中间RDD定期检查到可靠存储(例如HDF),以切断依赖链。
总之,元数据检查点主要是为了可以从驱动程序故障中进行恢复,而数据检查点对于有使用状态转换的基本功能也是必需的。

何时启用检查点(checkpointing)

必须为具有以下任何要求的应用程序启用检查点:
1. 有状态转换的使用:
如果应用程序中使用了updateStateByKey或ReduceByAndWindow(带反向函数),则必须提供检查点目录以允许定期RDD检查点。
2. 从运行应用程序的驱动程序的故障中恢复:
元数据检查点用于使用进度信息进行恢复。
请注意,没有上述有状态转换的简单流应用程序可以在不启用检查点的情况下运行。
在这种情况下,驱动程序故障的恢复也将是部分的(一些已接收但未处理的数据可能会丢失),这通常是可以接受的,许多应用程序以这种方式运行Spark流媒体应用程序,对非Hadoop环境的支持有望在未来得到改善。

如何配置使用检查点

可以通过在容错目录中设置目录来启用检查点,检查点信息将保存在可靠的文件系统(例如HDFS,S3等),通过使用streamingContext.checkpoint(checkpoint dir)完成,这将允许您使用前面提到的有状态转换。
此外,如果要使应用程序从驱动程序故障中恢复,则应重写流应用程序,使其具有以下行为:
1. 当程序第一次启动时,它将创建一个新的StreamingContext,然后调用start()。
2. 当程序在失败后重新启动时,它将从检查点目录中的检查点数据重新创建StreamingContext。
使用StreamingContext.getOrCreate可以简化此行为。其用途如下:
如果检查点目录存在,则将从检查点数据重新创建上下文。如果目录不存在(即,第一次运行),则将调用函数functionToCreateContext来创建新的上下文并设置数据流。
除了使用getOrCreate,还需要确保驱动程序进程在出现故障时自动重新启动。这只能由用于运行应用程序的部署基础结构来完成。这将在部署一节中进一步讨论。
请注意,RDD的检查点会导致节省到可靠存储的成本。这可能会导致RDD检查点所在批次的处理时间增加。
因此,需要仔细设置检查点的间隔。在小批量(比如1秒)情况下,检查每个批次可能会显著降低操作吞吐量。相反,检查点设置太少会导致谱系和任务大小增加,这可能会产生有害影响。
对于需要RDD检查点的有状态转换,默认间隔是批处理间隔的倍数,至少为10秒。可以使用dstream.checkpoint(checkpointInterval)设置它。
通常,检查点间隔为数据流的5-10个滑动间隔是一个很好的设置。无法从Spark Streaming中的检查点恢复累加器和广播变量。
如果启用检查点并同时使用累加器或广播变量,则必须为累加器和广播变量创建延迟实例化的单例实例,以便在驱动程序失败时重新启动后重新实例化它们。例如:

persist和 checkpoint 之间的区别


persist()可以将 RDD 的 partition 持久化到磁盘,但该 partition 由 blockManager 管理。
一旦 driver program 执行结束,也就是 executor 所在进程 CoarseGrainedExecutorBackend stop,blockManager 也会 stop,被 cache 到磁盘上的 RDD 也会被清空(整个 blockManager 使用的 local 文件夹被删除)。
而 checkpoint 将 RDD 持久化到 HDFS 或本地文件夹,如果不被手动 remove 掉,是一直存在的。在实际使用中可以根据实际情况进行持久化方法的选择。


本文作者:潘宗昊

本文来源:IT那活儿(上海新炬王翦团队)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129641.html

相关文章

  • SparkStreaming概述

    摘要:但在企业中存在很多实时性处理的需求,例如双十一的京东阿里,通常会做一个实时的数据大屏,显示实时订单。这种情况下,对数据实时性要求较高,仅仅能够容忍到延迟分钟或几秒钟。1 Spark Streaming是什么它是一个可扩展,高吞吐具有容错性的流式计算框架吞吐量:单位时间内成功传输数据的数量之前我们接触的spark-core和spark-sql都是处理属于离线批处理任务,数据一般都是在固定位置上...

    Tecode 评论0 收藏0
  • Spark Streaming学习笔记

    摘要:输入和接收器输入代表从某种流式数据源流入的数据流。文件数据流可以从任何兼容包括等的文件系统,创建方式如下将监视该目录,并处理该目录下任何新建的文件目前还不支持嵌套目录。会被一个个依次推入队列,而则会依次以数据流形式处理这些的数据。 特点: Spark Streaming能够实现对实时数据流的流式处理,并具有很好的可扩展性、高吞吐量和容错性。 Spark Streaming支持从多种数...

    陆斌 评论0 收藏0
  • Spark Streaming遇到问题分析

    摘要:遇到问题分析之后搞了个还没仔细了解可参考的与的有区别及并发控制先看看的,与的这几个概念。一个可以认为就是会最终输出一个结果的一条由组织而成的计算。在中,我们通过使用新极大地增强对状态流处理的支持。 Spark Streaming遇到问题分析 1、Spark2.0之后搞了个Structured Streaming 还没仔细了解,可参考:https://github.com/lw-lin/...

    stormzhang 评论0 收藏0
  • Leaf in the Wild: Stratio整合Apache和MongoDB为世界上最大的银行

    摘要:以及大数据平台都已经进行了集成并且处于企业就绪状态。因此,顾客避免浪费时间在安装配置及监控系统方面。注意防止数据频繁移动。 本文源地址:http://www.mongoing.com/blog/post/leaf-in-the-wild-stratio-integrates-apache-spark-and-mongodb-to-unlock-new-customer-insights...

    BDEEFE 评论0 收藏0
  • PySpark SQL 相关知识介绍

    摘要:大数据除了体积和速度外,数据的多样性和准确性也是大数据的一大特点。这些也被称为大数据的特征。介绍是一个解决大数据问题的分布式可伸缩的框架。介绍计算的模型最早出现在谷歌的一篇研究论文中。相关链接介绍是一个通用的分布式编程框架。 本文作者:foochane 本文链接:https://foochane.cn/article/2019060601.html 1 大数据简介 大数据是这个时代最...

    CoderStudy 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<