在火花流中是必要的检查点

时间:2016-09-20 16:59:39

标签: scala apache-spark checkpointing

我注意到火花流示例也有检查点的代码。我的问题是检查点有多重要。如果它具有容错能力,那么在这种流应用程序中发生故障的频率是多少?

2 个答案:

答案 0 :(得分:2)

这完全取决于您的使用案例。假设你正在运行一个流媒体作业,它只是从Kafka读取数据并计算记录数。如果您的申请在一年左右后崩溃,您会怎么做?

  • 如果您没有备份/检查点,则必须重新计算之前一年的所有值数据,以便您可以重新开始计算。
  • 如果您有备份/检查点,您只需阅读检查点数据并立即恢复。

或者,如果您只是在做一个流媒体应用程序,只需 Reads-Messages-From-Kafka>>> Tranform>>>插入数据库,我不必担心我的应用程序崩溃。即使它崩溃了,我也可以简单地恢复我的应用程序而不会丢失数据。

注意:Check-pointing是一个存储spark应用程序当前状态的过程。

随着容错的频率,您几乎不可能预测到中断。在公司中,

  • 可能会停电
  • 定期维护/升级群集

希望这会有所帮助。

答案 1 :(得分:1)

有两种情况:

  1. 您正在执行有状态操作,例如updateStateByKey 你必须使用检查点 - 保存每个州。没有设定 检查点目录,将抛出异常。
  2. 您只进行窗口操作 - 是的,您可以禁用检查点。但是我强烈建议设置检查点目录。
  3. 当驱动程序被杀时,您将丢失所有数据和进度信息。检查点可以帮助您从这种情况中恢复应用程序。

    失败是正常情况吗?当然!想象一下,这些机器中有大型集群,许多机器,许多组件。如果其中一个组件发生故障,那么您的应用程序也将失败。当与驱动程序的连接丢失时 - 您的应用程序失败。通过checkpoiting,您可以再次运行应用程序,它将恢复状态。