./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邮件归档
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
针对您的问题,我将分别进行解答:
每次使用./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>
。
一旦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模式和利用保存点功能,您可以有效地管理作业的生命周期和状态恢复。