Flink代码kill掉yarn任务,并且实现自动savepoint。

本文介绍了如何在平台化项目中通过代码方式Kill Flink在YARN上的任务,并自动触发Savepoint。主要步骤包括设置YARN任务ID、Flink的jobId和Savepoint路径,依赖配置,以及测试流程,验证了Savepoint的生效,实现了任务状态的无缝恢复。

一,最近在做平台,就是前后端分离的项目,简单的说就是对各种组件整合一下子,所以呢,提交任务啥的都在平台上搞了。

二,这里实现的功能很简单吧。就是代码模式,执行任务就可以kill掉yarn上的Flink任务。并且能自动生成savapoint

三,我们需要写入的参数是:

   1)yarn 任务id 

String appId = "application_1600222031782_0023";

   2)Flink任务的jobId

String jobid = "c4d7e2ff6a35d402eaf54b9f9ca0f6c6";

  3)需要savapoint地址

String savePoint = "hdfs://dev-ct6-dc-master01:8020/flink-savepoints5";

 pom依赖:

<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-yarn_${scala.binary.version}</artifactId>
    <version>${flink.version}</version>
</dependency>

如果不成功,执行任务的时候加上hadoop_home的环境变量(下面只是参考)

四,代码

import org.apache.flink.api.common.JobID;
import org.apache.flink.client.cli.CliArgsException;
import org.apache.flink.client.program.ClusterClient;
import org.apache.flink.configuration.Configuration;
import org.apache.flink.configuration.GlobalConfiguration;
import org.apache.flink.util.FlinkException;
import org.apache.flink.yarn.YarnClusterClientFactory;
import org.apache.flink.yarn.YarnClusterDescriptor;
import org.apache.flink.yarn.configuration.YarnConfigOptions;
import org.apache.hadoop.yarn.api.records.ApplicationId;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

 public class StopYarnJob {
    public static void main(String[] args) throws FlinkException, CliArgsException, ExecutionException, InterruptedException {
        String hadoop_home = System.getProperty("HADOOP_HOME");
        System.out.println("hado
<think>嗯,用户问的是如何在Apache Flink中使用savepoint文件重启任务。首先,我需要回顾一下Flinksavepoint相关机制。根据引用[2]和[4],savepoint和checkpoint不同,savepoint是用户手动触发的全局状态快照,用于有计划的任务重启或版本升级。而checkpoint是自动的,用于故障恢复。 接下来,用户的问题具体是重启任务的方法。根据引用[3]中的例子,重启命令需要指定-s参数加上savepoint路径。比如,使用flink run命令时带上-s选项。此外,引用[2]提到在恢复时要注意savepoint目录是否有效,否则任务可能无法启动。 另外,触发savepoint的方式有三种,如引用[2]所述:flink savepoint命令、flink cancel -s命令和REST API。用户可能需要知道如何生成savepoint,但问题主要关注如何用已有的来重启。 还要注意算子uid的设置,引用[2]指出,每个算子分配uid可以确保状态正确恢复,否则拓扑变化可能导致问题。所以在开发时建议显式设置uid。 最后,引用[5]提到savepoint的设计更偏向于手动管理,生命周期由用户控制。重启任务时需要检查savepoint的可用性,避免损坏的文件导致失败。 总结步骤应该是:1. 确保savepoint有效;2. 使用flink run命令带-s参数;3. 验证恢复结果。同时要提及注意事项,比如算子uid和状态大小的影响。</think>在Apache Flink中通过savepoint文件重启任务需遵循以下步骤: ### 一、触发Savepoint 1. **手动触发** 通过命令`./bin/flink savepoint <jobId> <savepoint路径>`触发Savepoint,例如: ```bash ./bin/flink savepoint 037bdd04403d45397ec69ee1dd1d578f file:/data/cloud/flink/savePointDir ``` 日志中会返回生成的Savepoint路径[^1][^2]。 2. **取消作业时触发** 使用`flink cancel -s`命令停止作业并同时生成Savepoint: ```bash ./bin/flink cancel -s file:/data/cloud/flink/savePointDir 037bdd04403d45397ec69ee1dd1d578f ``` 若作业处于异常状态(如Checkpoint失败),此操作可能失败[^2]。 ### 二、通过Savepoint重启任务 使用`flink run`命令指定Savepoint路径恢复任务: ```bash ./bin/flink run -s hdfs://path/to/savepoint-xxxx -m yarn-cluster your_job.jar ``` - `-s`参数后需填写完整的Savepoint路径(如`hdfs://hadoop102.dev:8020/flink-savepoints/savepoint-6eb006-26d797d303ff`)[^3]。 - 若作业拓扑变更,需确保算子已分配唯一`uid`,否则状态可能无法恢复[^2]。 ### 三、注意事项 1. **状态兼容性** 修改代码后,若算子`uid`或状态结构发生变化,可能导致恢复失败。 2. **Savepoint可用性** 需验证Savepoint目录是否完整(如HDFS文件是否损坏),否则任务无法启动[^2][^4]。 3. **性能影响** 状态较大的任务频繁触发Savepoint可能影响性能,建议根据状态大小调整触发频率[^2]。 ### 四、示例验证 引用案例中,任务停止后生成的订单数据在通过Savepoint重启后成功补回,证明状态恢复有效[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值