执行Flink SQL Client脚本报错:无法检索Yarn集群,应用已终止
以下是几种可能的原因:
执行模式差异:
sql-client.sh默认使用Yarn Session模式,该模式下会先启动一个长期运行的Flink集群会话(Yarn应用),SQL脚本依托这个会话执行。如果这个会话已经因任务完成、异常退出或手动停止而结束,SQL Client仍尝试连接它就会抛出该错误。而bin/flink run-application -t yarn-application用的是Yarn Application模式,每个Jar包都会启动独立的Yarn应用,任务结束后应用正常终止,不存在复用旧会话的问题,因此能正常运行。批处理任务导致Session自动关闭:如果你的
flinkSQL.sql是一次性批处理任务,若Flink配置了yarn.session.cluster.stop-on-job-finish: true(默认可能开启),当批处理任务完成后,Yarn Session集群会自动停止。此时SQL Client后续的交互(比如脚本执行后的状态检查)就会发现对应的Yarn应用已不存在,从而报错。而Application模式下任务与应用生命周期绑定,任务完成后应用正常结束,不会有后续连接冲突。Session集群资源不足提前退出:SQL Client启动的Session集群资源配置(如容器内存、CPU核数)可能不足以支撑
flinkSQL.sql的执行需求,导致Session集群在任务执行过程中因资源不足被Yarn强制回收,但Yarn层面标记为“成功完成”。而Jar包的资源配置(比如通过-yjm、-ytm参数指定)更适配任务需求,因此能正常运行。旧Session复用问题:如果之前启动过同一个Yarn Session集群且已结束,SQL Client可能默认尝试复用该Session的配置或连接信息,但对应的Yarn应用已不存在,从而触发错误。而Application模式每次都会创建全新的Yarn应用,不会依赖旧的会话信息。
内容的提问来源于stack exchange,提问作者ighack

