欢迎光临
我们一直在努力

Yarn NM 常驻Flink任务下线:stop/savepoint 释放容器

一、背景

NM:集群缩容,要下线一台部署 NodeManager 的机器,这台 NM 上还跑着 Flink 流任务常驻 TM 容器/常驻 Flink 任务(两种模式Yarn Session/Per-Job),YARN 不会自动杀掉长驻 TM 容器。

直接下线 NM,会导致 Flink 任务异常。必须先处理 Flink 任务,释放 YARN 容器,再做 NM 退役

常驻TM与常驻Flink容器:Yarn 常驻TM 容器与常驻Flink 任务-CSDN博客

二、完整操作步骤

第一步:先查看当前 YARN 上的 Flink 应用

# 列出yarn上所有正在运行的application
yarn application -list

找到 Flink 任务,识别类型:

  • Per-Job:每个任务单独一个 AM
  • Yarn Session:一个 Session AM,多个 Flink job 跑在同一个 session 集群

ApplicationType 是 Apache Flink,记下 applicationId,例如 application_1756xxxx_0001

第二步:对 Flink 任务执行 savepoint 并停止任务(核心)

savepoint:保存任务状态,后续可以恢复,保证数据不丢不重复

# 停止任务,触发savepoint
flink stop -p hdfs:///flink/savepoints/ <applicationId>

  • -p:指定 savepoint 保存到 HDFS 路径,记住返回的 savepoint 路径,恢复任务要用

✅ stop:优雅停止,会先触发 savepoint,处理完数据再关闭 TM 容器(推荐生产)

❌ 不要直接 flink cancel:cancel 默认不生成 savepoint,会丢状态

如果是 Yarn Session 集群(长驻 session)

Session 里面有多个 Flink Job:

  • 先逐个 flink stop 停止 session 内所有 job(详细可参考:xxxxxxxxxxxxx
  • 全部 job 停完后,关闭 Yarn Session,释放整个 session 的 NM 容器
  • flink cancel <session_applicationId>

    第三步:确认 Flink 的 TM 容器全部释放

    # 查看该NM节点上还有没有运行中的容器
    yarn node -list
    # 查看指定节点详情,看Containers数量
    yarn node -status node01:8041

    目标:该 NM 节点上 Containers:0,没有任何 running 容器。 也可以去 YARN WebUI:Nodes 页面,看这个 NM,running containers=0

    第四步:NM 退役(YARN 层面下线 NodeManager)

    YARN 没有像 HDFS 那样原生 decommission 黑名单,两种方案:

    方案 1(优雅推荐,临时停止 NM,不影响 RM)

  • 停止 NodeManager 进程
  • # 对应你的集群启停脚本
    yarn-daemon.sh stop nodemanager

  • RM 会检测到 NM 失联,一段时间后标记为 Lost。
  • 新任务不会调度到这台机器;已经没有容器,不会影响正在运行的任务。

    方案 2(YARN 黑名单,禁止新任务调度上来,适合提前隔离)

    修改 yarn-site.xml,配置 yarn.resourcemanager.nodes.exclude-path,写入 exclude 文件,文件填写要下线节点主机名。

    <property>
    <name>yarn.resourcemanager.nodes.exclude-path</name>
    <value>/etc/hadoop/conf/yarn_exclude_hosts</value>
    </property>

    生效:

    yarn rmadmin -refreshNodes

    效果:新 container 不再分配到该 NM,但已存在的容器继续跑。👉所以必须先停 Flink 释放容器,再执行这个。 容器全部跑完之后,再停 NM 进程。

    第五步:确认 HDFS DN 退役完成(并行做)

    DN 退役和处理 Flink 任务可以并行:

    # 查看DN退役进度
    hdfs dfsadmin -report

    等待 DN 状态 Decommissioned,块全部迁移完成。

    第六步:节点下线,关机 / 下架机器

    任务恢复(后续需要重新启动 Flink)

    从刚才的 savepoint 恢复任务

    flink run -s hdfs:///flink/savepoints/savepoint-xxxx your-flink.jar

    三、重点坑

  • 只 exclude NM,不会杀死正在运行的 Flink TM 容器!YARN exclude 只是禁止新任务调度,存量容器继续运行。所以必须手动 savepoint stop flink 任务。
  • 区分:
    • flink stop:优雅停止 + savepoint(流任务首选)
    • flink cancel:取消任务,默认不保存状态
  • 操作顺序口诀:停 Flink (savepoint) → 确认容器释放 → NM 黑名单 / 停 NM 进程 → 等待 DN 退役完成 → 下架机器
  • 顺序不能反:如果先停 NM,Flink TM 直接被杀,任务崩溃,状态丢失。
  • 四、补充:应急场景(任务不重要,不需要保留状态)

    业务允许丢失状态,可以直接 cancel 任务释放容器:

    flink cancel <applicationId>

    赞(0)
    未经允许不得转载:171主机测评 » Yarn NM 常驻Flink任务下线:stop/savepoint 释放容器
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址