Apache spark 如何确保驱动程序重新启动后不会重新计算DAG?

Apache spark 如何确保驱动程序重新启动后不会重新计算DAG?,apache-spark,yarn,high-availability,Apache Spark,Yarn,High Availability,如何确保spark的整个DAG高度可用,即当驱动程序重新启动时,不会从头重新计算(纱线簇模式下的默认HA) 目前,我使用spark协调多个较小的作业,即 阅读表1 散列一些列 写入HDFS 这是针对多个表执行的。 现在,当驱动程序重新启动时,即在处理第二个表时,会重新处理第一个表-尽管它已经成功存储 我认为默认的检查点机制(原始输入值)没有意义。 这里有什么好的解决方案? 是否可以检查(小)配置信息并仅重新处理尚未计算的内容 当驱动程序重新启动时(纱线簇模式下的默认HA) 当Spark应用程

如何确保spark的整个DAG高度可用,即当驱动程序重新启动时,不会从头重新计算(纱线簇模式下的默认HA)

目前,我使用spark协调多个较小的作业,即

  • 阅读表1
  • 散列一些列
  • 写入HDFS
这是针对多个表执行的。 现在,当驱动程序重新启动时,即在处理第二个表时,会重新处理第一个表-尽管它已经成功存储

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

当驱动程序重新启动时(纱线簇模式下的默认HA)

当Spark应用程序的驱动程序消失时,Spark应用程序和所有缓存的数据集都消失了。这是默认的

您必须使用某种缓存解决方案,如或。两者都使用Spark,并且都声称提供了比Spark应用程序寿命更长的功能


人们曾多次使用Spark Job Server在Spark应用程序之间共享数据(类似于重新启动Spark驱动程序)。

TL;DRSpark不是任务编排工具。虽然它有内置的调度器和一些内置的容错机制,但它同样适合于细粒度的任务管理,例如服务器编排(嘿,我们可以在每台机器上调用
管道来执行bash脚本,对吧)

如果希望粒度恢复,请选择对给定进程有意义的最小计算单元(根据描述,读、哈希、写看起来是个不错的选择),将其作为应用程序并使用外部编排提交作业

你可以建立穷人的替代方案,通过检查是否存在预期的输出,并在这种情况下跳过部分工作,但实际上没有-我们有各种经过战斗测试的工具,可以做得更好

作为旁注,Spark不为驾驶员提供HA,只能通过自动重启进行监控。另外,独立作业(读->转换->写)创建独立的DAG-没有全局DAG,应用程序的正确检查点需要其状态的完整快照(就像旧的一样)