如何确保在驾驶员重新启动后不会重新计算DAG



我如何确保启动的整个火花都高度可用,即在重新启动驱动程序时不会从头开始重新计算(默认HA在YARN群集模式下)。

>

目前,我使用Spark来编排多个较小的工作,即

  • 阅读table1
  • 哈希一些列
  • 写入HDFS

这是针对多个表执行的。现在,当驱动程序重新启动时,即在第二个表上工作时,第一个表已被重新处理 - 尽管它已经成功存储了。

我相信检查点的默认机制(原始输入值)是没有意义的。这里是一个很好的解决方案?是否可以检查(小)配置信息,并且仅重新处理尚未计算的内容?

tl; dr spark不是任务编排工具。虽然它具有内置调度程序和一些内置的容忍机制,但它适用于粒度任务管理,例如服务器编排(嘿,我们可以在每台计算机上调用pipe执行bash脚本,右)。

如果您想要颗粒状恢复选择最小的计算单元,该计算对给定的过程有意义(请阅读,哈希,写作看起来像是一个很好的选择,基于描述),使其成为应用程序,并使用外部编排来提交工作。

您可以通过检查是否存在预期的输出并在这种情况下跳过一部分工作,但实际上不是 - 我们有多种经过战斗测试的工具,可以做得更好。p>作为旁注Spark不能为驾驶员提供HA,只有自动重新启动的监督。同样独立的作业(读取 ->转换 ->写入)创建独立dag-没有全局dag,并且应用程序的正确检查点需要完整的状态快照(例如良好的旧blcr)。

重新启动驱动程序时(默认HA在纱线集群模式下)。

当火花应用程序的驱动程序消失时,您的火花应用程序就消失了,所有缓存的数据集也消失了。默认情况下。

您必须使用某种类型的缓存解决方案,例如https://www.alluxio.org/或https://ignite.apache.org/。两者都可以使用Spark和均声称提供该功能以超过Spark应用程序。

有时人们使用Spark Job Server在Spark应用程序上共享数据(这类似于重新启动Spark驱动程序)。

最新更新