开发者社区 问答 正文

在提交./bin/flink run -m yarn-cluster如何不让这个appid递增?

./bin/flink run -m yarn-cluster每次提交是都会产生一个新的APP-ID如:application_1567067657620_0254

当yarn application -kill application_1567067657620_0254后,

在提交./bin/flink run -m yarn-cluster如何不让这个appid递增?

问题2

./bin/flink run -m yarn-cluster提交任务后。cancel掉job,如何在提交到这个appid上?

*来自志愿者整理的flink邮件归档

展开
收起
游客nnqbtnagn7h6s 2021-12-06 18:49:41 534 分享 版权
阿里云 AI 助理回答

针对您的问题,我将分别进行解答:

问题1: 如何在提交Flink任务到YARN集群时避免产生新的APP-ID?

每次使用./bin/flink run -m yarn-cluster命令提交Flink作业时,YARN会为每个作业生成一个新的唯一的APP-ID,这是YARN资源管理器为了隔离和管理不同应用实例而设计的机制。因此,直接通过该命令提交作业无法控制APP-ID不递增。

解决方案建议: - Session Cluster模式:若希望复用同一个APP-ID来运行多个作业,可以考虑使用Flink的Session Cluster模式。在Session Cluster模式下,您首先启动一个长期运行的Flink集群(即Session),然后向这个集群提交多个作业,这些作业共享集群资源,但每个作业依然有其独立的Job ID而非APP-ID。启动Session Cluster的命令类似于./bin/yarn-session.sh -n <taskManagerSlots>

  • 保存点与恢复:如果您希望在取消作业后能从同一状态继续执行,而不是阻止APP-ID递增,可以利用Flink的保存点功能。在取消作业前触发一个保存点,之后可以根据此保存点重启作业,尽管这不会影响APP-ID的递增,但能确保作业状态的一致性与连续性。

问题2: 提交任务后取消job,如何再次提交到相同的appid上?

一旦YARN作业被取消或完成,其对应的APP-ID将不再有效,且无法重新使用相同的APP-ID提交新的或旧的作业。YARN的设计原则是为每个应用实例分配独一无二的ID以进行资源管理和跟踪。

替代方案: - 使用Savepoint恢复作业:如前所述,当您需要在取消作业后再次提交时,可以先为作业创建一个savepoint。取消作业后,通过指定之前的savepoint位置,您可以重新提交作业并从之前中断的地方继续执行。这并不意味着作业会关联到原来的APP-ID,而是保证了作业的状态连续性。命令示例如下:

# 创建savepoint
./bin/flink savepoint <jobId> hdfs://<hdfsPath>/savepoint

# 根据savepoint恢复作业
./bin/flink run -s hdfs://<hdfsPath>/savepoint/<savepointDir> <jobJar>

综上所述,虽然直接控制APP-ID不递增或重复使用已取消作业的APP-ID在YARN的标准操作中不可行,但通过采用Session Cluster模式和利用保存点功能,您可以有效地管理作业的生命周期和状态恢复。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答