Spark Dstreams缓存
与RDD类似,DStreams也可以使用persist()方法将数据流持久化到内存中。使用Cache/Persistence对于需要多次计算的数据流中的数据非常有用。在基于窗口和状态操作时,持久性存储将隐式进行,无需开发人员显示调用persist()方法。需要显示指定持久化的数据集可以通过调用persist()方法实现。默认情况下,通过网络接收的输入流将被复制到两个节点以实现容错,并且默认持久性存储级别将在内存中进行序列化。

Spark Dstreams持久性存储
Checkpointing是Spark Streaming应用程序保持持久性的关键机制。由于流式应用程序需要24/7运行,因此必须适应与程序逻辑无关的故障。checkpointing有两种类型:metadata checkpointing和data checkpointing。元数据checkpointing将定义流式计算的信息保存到可靠的存储(如HDFS)中,以便于从程序驱动节点的故障中进行恢复。数据checkpointing将生成的RDD保存到可靠的存储中。对于有状态转换的基本功能,data checkpointing是必需的。在此类转换中,生成的RDD依赖于以前批处理的RDD,导致依赖链不断增加。为了避免恢复时间的无限增加,data checkpointing定期检查到可靠的存储中以切断依赖链。需要使用checkpointing的流应用程序必须提供checkpoint目录以允许定期RDD检查点。
需要注意的是RDD检查点会导致成本,并会导致检查点所在批次的处理时间增加。因此,需要谨慎设置检查点间隔。而对于无法从Spark Streaming中的检查点恢复累加器和广播变量的,需要对其创建延迟实例化的单例实例。在使用持久化时,persist()方法将RDD的partition持久化到磁盘,但当executor所在进程CoarseGrainedExecutorBackendstop后,被cache到磁盘上的RDD也会被清空。而checkpoint将RDD持久化到HDFS或本地文件夹,并且一直存在。在实际使用中,应根据实际情况选择适合的持久化方法。
原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/6222.html
