Flink CDC中通过yarn-per-job 提交flink 任务到yarn 上 当一张表写入多个数据源(也就是说有多个insert 语句 StreamStatementSet
)
然后yarn 上有几个insert语句 就会申请几个yarn 任务id 但是
只是只有第一个yarn 任务能到running的状态
其他任务都在ACCEPTED状态?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在使用 Flink CDC 通过 yarn-per-job
模式提交任务到 YARN 上时,如果一张表写入多个数据源(即存在多个 INSERT
语句或 StreamStatementSet
),YARN 上会为每个 INSERT
语句生成一个独立的任务 ID。然而,只有第一个任务能够进入 RUNNING
状态,而其他任务则停留在 ACCEPTED
状态。这种现象可能与以下原因和配置相关:
在 yarn-per-job
模式下,每个 Flink 作业都会启动一个独立的 YARN 集群。如果多个 INSERT
语句对应的任务同时提交,YARN 的资源调度器可能会因为资源不足而导致部分任务无法立即分配到资源,从而停留在 ACCEPTED
状态。
解决方法: - 增加 YARN 集群资源:确保 YARN 集群有足够的资源(如内存、CPU 核心数)来支持所有任务的并发运行。 - 调整任务并行度:降低 Flink 任务的并行度,减少对 YARN 资源的需求。 - 优化资源分配策略:在 YARN 中调整队列的资源配置,确保任务能够公平地获取资源。
Flink 在处理多个 INSERT
语句时,可能会将这些语句视为独立的任务,并尝试并行提交到 YARN。然而,如果这些任务之间存在隐式的依赖关系(例如共享某些资源或状态),可能会导致后续任务无法正常启动。
解决方法: - 合并任务:将多个 INSERT
语句合并为一个任务提交,避免任务之间的资源竞争。可以通过 StreamStatementSet
将多个 INSERT
语句打包为一个逻辑任务。 - 显式设置依赖关系:在任务配置中明确指定任务之间的依赖关系,确保前一个任务完成后,后续任务再启动。
YARN 的队列配置可能会限制单个用户或应用程序的最大资源使用量。如果多个任务同时提交,可能会触发队列的资源限制,导致部分任务无法进入 RUNNING
状态。
解决方法: - 检查 YARN 队列配置:确认当前队列的资源限制(如 maximum-capacity
和 user-limit-factor
),并根据需要调整这些参数。 - 分散任务提交时间:通过延时提交部分任务,避免资源争抢。
Flink 的某些配置可能会影响任务在 YARN 上的执行行为。例如: - JobManager 和 TaskManager 内存配置不足:如果内存配置过低,可能导致任务无法正常启动。 - Slot 数量不足:如果 Slot 数量不足以支持所有任务的并发执行,部分任务可能会被阻塞。
解决方法: - 调整 Flink 内存配置:增加 JobManager
和 TaskManager
的内存配置,确保任务有足够的资源运行。 - 增加 Slot 数量:通过调整 taskmanager.numberOfTaskSlots
参数,增加可用的 Slot 数量。
YARN 的调度器(如 Capacity Scheduler 或 Fair Scheduler)可能会优先调度某些任务,而将其他任务置于等待状态。这通常与调度器的公平性策略或队列优先级有关。
解决方法: - 检查调度器日志:查看 YARN 调度器的日志,确认是否存在资源分配不均的问题。 - 调整调度器策略:根据实际需求选择合适的调度器,并调整其配置以优化任务调度。
HIGHEST
、HIGH
、MEDIUM
等)。确保高优先级任务能够优先获取资源。针对上述问题,建议按照以下步骤进行排查和优化: 1. 检查 YARN 集群的资源使用情况,确保有足够的资源支持所有任务的并发运行。 2. 合并多个 INSERT
语句为一个任务,减少任务数量。 3. 调整 Flink 和 YARN 的资源配置,包括内存、Slot 数量和队列限制。 4. 优化 YARN 调度器的配置,确保任务能够公平地获取资源。
通过以上措施,可以有效解决多个 INSERT
语句导致的任务状态异常问题。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。