You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Yarn集群重启Flink 1.4.2任务并从最近Savepoint恢复状态

刚好有过Flink 1.4.2在Yarn集群上用Savepoint恢复任务的实操经验,给你一步步拆解清楚:

前提准备
  • 先确认你手里的Savepoint路径是合法有效的,不管是手动触发生成的还是任务故障时自动留存的(如果之前配置了state.savepoints.dir,Flink会把Savepoint存在这个分布式文件系统路径下,比如HDFS路径hdfs:///flink/savepoints/savepoint-xxxxxx)。
  • 确保要重启的任务JAR包、依赖以及配置参数和之前运行的完全一致,别因为改了依赖或者配置导致状态加载失败。
具体重启操作

场景一:直接以Yarn集群模式提交恢复任务

如果你之前是用yarn-cluster模式提交的任务,直接用Flink CLI执行以下命令即可:

./bin/flink run -m yarn-cluster -yn <原任务并行度> -s <Savepoint完整路径> -c <主类全限定名> <你的任务JAR包路径>

给你解释下关键参数:

  • -m yarn-cluster:明确指定任务在Yarn集群模式下运行
  • -yn:设置并行度,强烈建议和生成Savepoint时的并行度一致——Flink 1.4.2对状态重缩放的支持有限,贸然改并行度大概率会恢复失败
  • -s:这是指定Savepoint的核心参数,必须填正确的分布式文件系统路径
  • -c:如果你的JAR包没有在MANIFEST里指定主类,就需要用这个参数填主类的全路径,比如com.xxx.flink.jobs.UserBehaviorAnalysisJob

举个实际的例子,你可以参考:

./bin/flink run -m yarn-cluster -yn 6 -s hdfs:///flink/savepoints/savepoint-123abc -c com.example.MyFlinkJob ./lib/my-flink-job-1.0.jar

场景二:基于已存在的Yarn Session恢复任务

如果你的任务之前是运行在一个持久化的Yarn Session里的,那步骤分两步:

  1. 先启动(或确保已启动)Yarn Session:
./bin/yarn-session.sh -n <TaskManager数量>
  1. 保持客户端在同一个会话中,提交恢复命令(不需要再指定-m yarn-cluster,因为客户端已经绑定到Session了):
./bin/flink run -s <Savepoint完整路径> -c <主类全限定名> <你的任务JAR包路径>
避坑注意事项
  • 权限问题:一定要保证Flink客户端和Yarn集群的运行用户有访问Savepoint路径的权限,不然会报文件找不到或者权限拒绝的错误。
  • 清理残留任务:如果之前的任务在Yarn上还有残留的Application(可以用yarn application -list查看),先执行yarn application -kill <APP_ID>杀掉,再提交恢复任务,避免资源冲突。
  • 配置一致性:状态后端、检查点相关的配置要和之前完全一致,比如之前用的是RocksDB状态后端,恢复时不能改成MemoryStateBackend,否则状态加载会失败。

内容的提问来源于stack exchange,提问作者user3107673

火山引擎 最新活动