Spark Streaming 检查点,何时启用检查点,如何配置检查点

Spark Streaming编程指南 手册

检查点

  流应用程序必须全天候运行,因此必须能够适应与应用程序逻辑无关的故障(例如,系统故障,JVM崩溃等)。为了实现这一点,Spark Streaming需要将足够的信息检查到容错存储系统,以便它可以从故障中恢复。检查点有两种类型的数据。

  • 元数据检查点 - 将定义流式计算的信息保存到容错存储(如HDFS)。这用于从运行流应用程序的驱动程序的节点的故障中恢复(稍后详细讨论)。元数据包括:
    • 配置 - 用于创建流应用程序的配置。
    • DStream操作 - 定义流应用程序的DStream操作集。
    • 不完整的批次 - 其工作排队但尚未完成的批次。
  • 数据检查点 - 将生成的RDD保存到可靠的存储。在一些跨多个批次组合数据的有状态转换中,这是必需的。在这种转换中,生成的RDD依赖于先前批次的RDD,这导致依赖关系链的长度随时间增加。为了避免恢复时间的这种无限增加(与依赖链成比例),有状态变换的中间RDD周期性地 检查点到可靠存储(例如HDFS)以切断依赖链。
      总而言之,元数据检查点主要用于从驱动程序故障中恢复,而如果使用状态转换,即使对于基本功能也需要数据或RDD检查点。

何时启用检查点

  必须为具有以下任何要求的应用程序启用检查点:

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

如何配置检查点

  可以通过在容错,可靠的文件系统(例如,HDFS,S3等)中设置目录来启用检查点,检查点信息将保存到该文件系统中。这是通过使用完成的streamingContext.checkpoint(checkpointDirectory)。这将允许您使用上述有状态转换。此外,如果要使应用程序从驱动程序故障中恢复,则应重写流应用程序以使其具有以下行为。

  • 当程序第一次启动时,它将创建一个新的StreamingContext,设置所有流然后调用start()。
  • 当程序在失败后重新启动时,它将从检查点目录中的检查点数据重新创建StreamingContext。
    Spark Streaming 检查点,何时启用检查点,如何配置检查点_第1张图片
    Spark Streaming 检查点,何时启用检查点,如何配置检查点_第2张图片

  如果checkpointDirectory存在,则将从检查点数据重新创建上下文。如果目录不存在(即第一次运行),则将functionToCreateContext调用该函数以创建新上下文并设置DStream。请参阅Scala示例 RecoverableNetworkWordCount。此示例将网络数据的字数附加到文件中。

  除了使用之外getOrCreate还需要确保驱动程序进程在失败时自动重启。这只能通过用于运行应用程序的部署基础结构来完成。这在“ 部署”部分中进一步讨论 。

  请注意,RDD的检查点会导致节省可靠存储的成本。这可能会导致RDD被检查点的那些批次的处理时间增加。因此,需要仔细设置检查点的间隔。在小批量(例如1秒)时,每批次的检查点可能会显着降低操作吞吐量。相反,检查点过于频繁会导致谱系和任务大小增长,这可能会产生不利影响。对于需要RDD检查点的有状态转换,默认间隔是批处理间隔的倍数,至少为10秒。它可以通过使用来设置 dstream.checkpoint(checkpointInterval)。通常,DStream的5-10个滑动间隔的检查点间隔是一个很好的设置。

你可能感兴趣的:(大数据总结)