ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Yarn 常驻TM 容器与常驻Flink 任务

Yarn 常驻TM 容器与常驻Flink 任务 常驻 TM 容器是 YARN 层面的资源容器进程Yarn Session / Per-Job是 Flink 跑在 YARN 上的两种部署模式决定了 AM、TM 容器的生命周期两种模式下只要流任务在持续运行TM 容器就会常驻不退出这就是缩容时遇到的难点YARN exclude 黑名单杀不掉这些常驻容器。一、模式1. Per-Job 模式每个任务独立集群架构1 个 Job 1 个 AM 若干 TM 容器提交一个 Flink 流任务YARN 启动 AMAM 申请 TM 容器容器启动后常驻持续消费 Kafka 等流数据。关联关系任务存在 → TM 容器常驻任务stop/cancel→ AM 和所有 TM 容器一起释放消失。特点任务之间资源隔离。A 任务挂了不影响其他任务。缩容只需要对这个 job 执行flink stop jobId任务停掉TM 容器全部释放。2. Yarn Session 模式共享集群架构先启动一个长驻 Session AM预先申请一批 TM 容器常驻之后多个 Job 提交到这个 Session 集群里Session AM 是常驻进程TM 容器预先启动、长期常驻提交 Job 后Job 跑在这批已经存在的 TM 容器上Job 停止TM 容器不一定销毁继续等待接收新 Job。关联关系Job 只是跑在常驻 TM 里的计算逻辑Job stop 之后TM 容器还留在 YARN 节点上不会自动释放只有当整个 Session AM 被 cancel 之后这批常驻 TM 容器才会全部释放。这就是 Yarn Session 缩容最麻烦的点就算里面所有 job 都 stop 了TM 容器还占着 NM 资源。3. 对比总结表模式TM 容器什么时候创建TM 容器什么时候释放常驻特点Per-Job提交 Job 时 AM 向 YARN 申请Job stop/cancel 完成立刻销毁 TMJob 运行期间 TM 常驻任务停容器消失Yarn Session启动 Session 集群的时候一次性申请cancel 整个 Session AM才会销毁 TMTM 容器长期常驻Job 启停不销毁容器4. 核心关联缩容场景重点常驻 TM 容器不是独立任务是资源载体。不管 Session 还是 Per-Job流任务运行时TM 容器都是常驻运行不会执行完就退出批任务才会跑完释放。Per-Job任务生命周期 ≈ TM 容器生命周期。停 jobTM 就释放。Yarn SessionJob 生命周期 和 TM 容器生命周期是分离的。停止 Session 内所有 JobJob 不再运行但 TM 容器还留在 NM 节点YARN 上容器依旧存在必须额外 cancel Session AM这批常驻 TM 才会全部释放。 所以下线 NM 节点如果上面是 Yarn Session 集群 ① flink list 查出所有 JobID ② 逐个 flink stop jobId保存状态 ③ 全部 job 停止后还要 cancel Session ApplicationId才能把常驻 TM 容器全部释放yarn node -status才会看到 Containers0。二、精简版常驻 TM 容器是 YARN 上的资源进程流任务运行时 TM 就常驻。Per-Job 模式一个 Job 对应一套 AMTMJob 停止TM 容器跟着释放。Yarn Session 模式先启动常驻的 Session AM 和一批常驻 TM 容器多个 Job 共享这批 TM。Job 停止TM 容器不会销毁仍然常驻在 NM 节点。只有取消整个 Session 集群TM 容器才会全部释放。 所以缩容 NM 节点时如果是 Yarn Session仅仅 stop 内部所有 job 不够最后还需要 cancel Session释放常驻 TM 容器否则节点还有运行中的容器不能直接下线。三、高频QAQ为什么批任务不会有常驻 TM 的问题AFlink 批任务任务计算完成之后TM 容器自动退出释放资源流任务是无限流持续消费所以 TM 容器常驻。Q如果 NM 节点上是 Yarn Session只 stop 所有 job不 cancel session直接把 NM 加入 yarn exclude 会怎么样A黑名单只能阻止新容器调度。老的常驻 TM 容器还在节点运行。此时下架 / 停 NMTM 进程被杀死Session 集群异常后续提交到这个 Session 的 Job 都会失败。
返回列表