【问题标题】:Set path dynamic for Flink Checkpoint for Flink Job in Yarn Cluser为 Yarn Cluster 中的 Flink Job 设置 Flink Checkpoint 的路径动态
【发布时间】:2018-05-23 16:39:08
【问题描述】:

我正在使用 Yarn 来运行 Flink 作业。对于每个 Flink 作业,我都会创建一个检查点。

我提交了一个在我的 Yarn 集群中运行的 Flink 作业。我有一个轮询作业,它检查 Yarn 上的作业是否失败并重新启动它。当再次提交作业时,Yarn 会为此 Flink 作业创建一个新的 application_id。如何配置重新提交的 Flink 作业以使用重新启动的 Flink 作业的检查点。

我已经设置好了 state.savepoints.dir = hdfs://localhost:9000/checkpoint/ 在 flink-conf.yaml 中`

在创建 Flink 作业时, streamExecutionEnvironment.setStateBackend(new FsStateBackend("hdfs://localhost:9000/checkpoint/uuid-job-1"));

当我进行此设置时,检查点保存在 conf 文件 (hdfs://localhost:9000/checkpoint/) 中指定的路径中,而不是我在创建 Flink 作业时设置的路径中。

任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: apache-flink flink-streaming flink-sql


    【解决方案1】:

    很遗憾,您无法使用旧工作的检查点开始新工作。你可以做的是使用externalized checkpoints。 flink state.checkpoints.dir。但是您可以在每次提交之前对其进行更改。

    来自邮件列表thread 的补充说明:

    好消息是 Flink 1.5 将重新设计外部化的方式 检查点有点作用:基本上,所有检查点现在都可以 被认为是外部化的,元数据将存储在根目录中 检查点的目录,而不是所有作业的一个全局目录。 这样,外部化检查点的元数据位于 每个作业的检查点目录,它应该相当简单 从中恢复。

    【讨论】:

    • But you can alter it before each submission - 你的意思是说我可以为我使用 Yarn 提交的每个作业设置一个特定的位置。我试过这个。我为我提交的每项工作使用了一个特定的位置。但它没有用。
    • 您是否在每个集群的作业中运行您的作业?还是单个集群中的多个作业?您可以为每个集群更改此设置。要更改此设置,您必须编辑 flink-conf.yaml
    • Flink 作业在一个 Yarn 容器中运行(容器中有多个容器)。我将作业部署在 Yarn 容器中。由于某些原因,我的 Yarn 应用程序死了,我重新启动了这项工作。我希望这项工作能够从最后一个检查点继续。是否可以为每个作业指定一个唯一路径,以便如果一个作业终止并且我在 Yarn 中重新提交该作业,Flink 作业将使用其最后保存的检查点。
    • 正如我所说,您可以在启用外部检查点的情况下执行此操作,并且您需要在每次提交作业之前更改 flink-conf.yaml 中的设置 state.checkpoints.dir。很遗憾,您无法在代码中更改此设置。
    • @DawidWysakowicz 我没看错,不能以编程方式设置state.checkpoints.dir
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 2022-08-17
    • 2019-02-15
    相关资源
    最近更新 更多