Flink Yarn-Session Job 相关常用脚本

一、Flink Yarn-Session 自动列出 session 内所有 running job,批量 stop脚本

1. 重要前置提醒

  1. 脚本只做预览 + 批量 stop,务必先试运行看输出,确认 jobId 无误再执行真实 stop
  2. 仅适用于Yarn Session,Flink on YARN
  3. 执行 stop 会生成 savepoint,提前确认 HDFS savepoint 目录有写入权限
  4. 生产环境:优先手动逐个 stop;脚本适合测试环境,或者 job 数量非常多的场景

2. shell 脚本:flink_session_batch_stop.sh

#!/bin/bash # 用法: sh flink_session_batch_stop.sh application_xxxx_0001 hdfs:///flink/savepoints # 接收2个入参:session的applicationId、savepoint路径 SESSION_APP_ID=$1 SAVEPOINT_PATH=$2 if [ $# -ne 2 ];then echo "用法:$0 <YarnSession ApplicationId> <savepoint hdfs路径>" echo "示例:$0 application_1756000000000_0001 hdfs:///flink/savepoints" exit 1 fi # 1. 列出session中所有RUNNING状态job,提取JobID echo "===== 正在查询Session内运行中的Job =====" JOB_IDS=$(flink list -t yarn-session -Dyarn.application.id=${SESSION_APP_ID} | grep "RUNNING" | awk '{print $4}') if [ -z "${JOB_IDS}" ];then echo "未查询到RUNNING的Job,无需停止" exit 0 fi echo "查到待停止JobID列表:" echo "${JOB_IDS}" echo "" # 2. 预览阶段:只打印命令,不执行真实stop(默认打开预览!) read -p "是否进入预览模式(只打印命令不执行)?输入N则真实执行stop [Y/N] " ANS for JOB_ID in ${JOB_IDS} do CMD="flink stop -p ${SAVEPOINT_PATH} ${JOB_ID}" echo ">>> JobID: ${JOB_ID}" echo " 执行命令:${CMD}" if [ "${ANS}" != "N" ] then echo " 【预览模式】不执行" else echo " 【真实执行】开始stop,等待生成savepoint..." ${CMD} if [ $? -eq 0 ];then echo " ${JOB_ID} stop成功,记住返回的savepoint地址!" else echo " ${JOB_ID} stop失败,请检查!" fi fi echo "-----------------------------------------" done echo "" echo "===== 全部Job处理完成 =====" echo "全部Job stop完成后,记得执行cancel关闭Session集群释放TM容器" echo "命令参考:flink cancel -t yarn-session -Dyarn.application.id=${SESSION_APP_ID} ${SESSION_APP_ID}"

3. 使用步骤

1)保存脚本并授权

vim flink_session_batch_stop.sh chmod +x flink_session_batch_stop.sh

2)第一步:预览(强烈必做!)

sh flink_session_batch_stop.sh application_1756000000000_0001 hdfs:///flink/savepoints

输入Y,只会打印 jobId 和 stop 命令,不会真正停止任务,核对 job 是否是你想要下线的。

3)第二步:真实执行 stop预览确认无误后再次执行脚本,输入N,脚本会逐个执行 flink stop:

sh flink_session_batch_stop.sh application_1756000000000_0001 hdfs:///flink/savepoints

4)所有 Job stop 完成之后,关闭 Session,释放常驻 TM 容器

flink cancel -t yarn-session -Dyarn.application.id=application_1756000000000_0001 application_1756000000000_0001

脚本说明 & 坑点

  1. 脚本通过grep RUNNING过滤,已经停止的 Job 不会被处理
  2. flink stop 是同步阻塞操作,每一个 job 会等待 savepoint 生成完成,才会处理下一个 job,任务多的时候耗时久
  3. 脚本捕获返回码,如果某个 job stop 失败会打印错误,你可以介入排查
  4. 脚本不会自动保存输出的 savepoint 路径,需要手动记录每个 job 返回的 savepoint 地址,恢复任务要用

二、Flink Yarn-SessioFlink Yarn-Session Job 状态校验脚本n Job 状态校验脚本

作用:批量检查 Session 内 Job 状态,确认所有 RUNNING Job 都已经停止,用于执行完批量 stop 之后校验。

输出:当前运行中的 Job 列表;如果无 RUNNING Job,代表全部停止,可以继续 cancel Session。

#!/bin/bash # flink_session_check_job.sh # 用法:sh flink_session_check_job.sh <session applicationId> SESSION_APP_ID=$1 if [ $# -ne 1 ];then echo "用法:$0 <YarnSession ApplicationId>" echo "示例:$0 application_1756000000000_0001" exit 1 fi echo "===== 查询Session: ${SESSION_APP_ID} 内Job状态 =====" JOB_RAW=$(flink list -t yarn-session -Dyarn.application.id=${SESSION_APP_ID}) echo "${JOB_RAW}" # 提取RUNNING的JobID RUNNING_JOB=$(echo "${JOB_RAW}" | grep "RUNNING" | awk '{print $4}') echo -e "\n===== 校验结果 =====" if [ -z "${RUNNING_JOB}" ];then echo "校验通过:没有RUNNING状态Job,可以执行cancel Session" echo "执行命令参考:" echo "flink cancel -t yarn-session -Dyarn.application.id=${SESSION_APP_ID} ${SESSION_APP_ID}" else echo "校验不通过,还有正在运行的JobID:" echo "${RUNNING_JOB}" echo "请确认这些Job是否完成stop,不能cancel Session!" exit 1 fi

使用方法

# 授权 chmod +x flink_session_check_job.sh # 执行校验 sh flink_session_check_job.sh application_1756000000000_0001

输出两种情况

  1. 无 RUNNING Job:提示可以 cancel Session
  2. 还有运行 Job:打印 JobID,退出码非 0,阻止后续 cancel 操作

三、组合自动化脚本

把批量 stop + 状态校验合并,stop 全部任务后自动校验,校验通过提示 cancel session。 ⚠️ 生产不建议全自动 cancel,人工确认后再执行 cancel。

#!/bin/bash # flink_session_stop_all.sh SESSION_APP_ID=$1 SAVEPOINT_PATH=$2 if [ $# -ne 2 ];then echo "用法:$0 <session appId> <savepoint hdfs路径>" exit 1 fi #1. 获取running job JOB_IDS=$(flink list -t yarn-session -Dyarn.application.id=${SESSION_APP_ID} | grep "RUNNING" | awk '{print $4}') if [ -z "${JOB_IDS}" ];then echo "无运行Job" exit 0 fi echo "待停止Job列表:${JOB_IDS}" read -p "确认批量stop?[Y/N]" CONFIRM if [ "${CONFIRM}" != "Y" ];then echo "退出" exit 0 fi #2. 逐个stop for J in ${JOB_IDS} do echo "stop job ${J}" flink stop -p ${SAVEPOINT_PATH} ${J} done #3. 校验 echo -e "\n==== 开始校验Job状态 ====" RUNNING_JOB=$(flink list -t yarn-session -Dyarn.application.id=${SESSION_APP_ID} | grep "RUNNING" | awk '{print $4}') if [ -z "${RUNNING_JOB}" ];then echo "所有Job已停止,请手动执行cancel session释放TM" else echo "还有Job运行:${RUNNING_JOB}" exit 1 fi

四、要点

批量停止 Yarn Session 内 Job,我会写两段脚本: 第一段批量 stop,并且增加预览模式,防止误杀; stop 执行完成后,调用校验脚本,查询 Session 内 Job 状态,确认不存在 RUNNING Job。 只有校验通过,才可以手动 cancel Session,释放常驻 TM 容器。 全程不自动 cancel Session,留人工确认环节,规避生产风险。

五、DN/NM退役整套缩容操作顺序(脚本串联版)

  1. flink_session_batch_stop.sh→ 预览,确认 Job,执行批量 stop
  2. flink_session_check_job.sh→ 校验,确认无 RUNNING job
  3. 人工确认后:flink cancel关闭 Session,释放 TM 容器
  4. yarn node -status xxx:8041确认容器数 = 0
  5. 继续执行 NM 黑名单、DN 退役流程

相关新闻

自研REA:用事件溯源实现业务状态可追溯与审计

自研REA:用事件溯源实现业务状态可追溯与审计

先交代一下背景。我维护的一个内部业务系统里&#xff0c;最核心的订单表每天都在被UPDATE status反复改写。某天出过一次事故&#xff1a;一段促销脚本因为 WHERE 条件没有加括号&#xff0c;导致条件判断完全失真&#xff0c;把一批已付款订单的状态直接刷成了已取消。最难受…

2026/10/20 12:42:30 阅读更多 →
磁盘I/O性能排查利器:iostat核心指标与实战案例

磁盘I/O性能排查利器:iostat核心指标与实战案例

1. 为什么排查磁盘问题我总是第一个打开 iostat干运维和后台开发这些年&#xff0c;只要线上出现“服务卡顿”“接口超时”“数据库突然变慢”&#xff0c;我下意识就会敲一条命令看看磁盘到底在干嘛。这条命令就是iostat。它不是万能的&#xff0c;但绝对是最先该看的那个——…

2026/10/20 12:41:30 阅读更多 →
从空闲检测到外设断电:Windows自动锁屏节能方案

从空闲检测到外设断电:Windows自动锁屏节能方案

我的电脑最近半年一直在跑一个看起来很土的需求&#xff1a;连续30分钟没有任何操作&#xff0c;就自动锁定屏幕&#xff0c;同时把显示器、音箱这些外设的电源一起断掉&#xff0c;实现节能。这个需求听起来就是电源选项里改几个下拉框的事&#xff0c;真正做下来才发现&#…

2026/10/20 12:41:30 阅读更多 →

最新新闻

数据结构(笔记)——顺序栈

数据结构(笔记)——顺序栈

1.顺序栈的定义顺序栈是 栈的一种顺序存储结构&#xff0c;即用 一段连续的存储空间&#xff08;通常是数组&#xff09;来实现栈。 栈的特点是 先进后出&#xff08;LIFO, Last In First Out&#xff09;&#xff1a;只能在一端&#xff08;称为栈顶 Top&#xff09;进行插入和…

2026/10/20 19:24:51 阅读更多 →
用Steering Files和Kiro Hooks打造AI编程助手的项目记忆系统

用Steering Files和Kiro Hooks打造AI编程助手的项目记忆系统

你有没有这种感觉——同一个AI编程助手&#xff0c;在别人手里像干了十年的老兵&#xff0c;到了你手里&#xff0c;连你上礼拜刚拆分的模块都记不住。每次它都很客气地说“你好&#xff0c;有什么可以帮你”&#xff0c;然后你只能再花十分钟去解释&#xff1a;我们的项目分层…

2026/10/20 19:24:51 阅读更多 →
如何榨干LFM2.5-24B-A2B-Preview-mxfp8的推理能力:Chat Template与max-tokens配置指南

如何榨干LFM2.5-24B-A2B-Preview-mxfp8的推理能力:Chat Template与max-tokens配置指南

【免费下载链接】LFM2.5-24B-A2B-Preview-mxfp8 项目地址&#xff1a; https://ai.gitcode.com/hf_mirrors/mlx-community/LFM2.5-24B-A2B-Preview-mxfp8 点击查看 免费下载 LFM2.5-24B-A2B-Preview-mxfp8 是 Liquid AI 的 MoE 大语言模型的 MLX 量化版本&#xff0c;总参数 2…

2026/10/20 19:24:51 阅读更多 →
信贷风控实战:从数据清洗到风险定价的完整建模流程

信贷风控实战:从数据清洗到风险定价的完整建模流程

简介&#xff1a;2020年全国大学生数学建模竞赛C题“中小微企业信贷决策”实践资料包&#xff0c;包含可编辑Word论文与MATLAB源代码&#xff0c;面向参赛学生、毕业设计者及金融数据分析学习者&#xff0c;系统展示基于统计建模解决企业信贷风险评估的完整流程。压缩包共160个…

2026/10/20 19:24:51 阅读更多 →
C语言终端表格打印库:按字符显示宽度实现中文对齐

C语言终端表格打印库:按字符显示宽度实现中文对齐

简介&#xff1a;终端中以表格形式整齐打印包含中文的字符串&#xff0c;是不少C语言初学者都会遇到的常见痛点。这份示例资源专门解决C语言表格对齐打印问题&#xff0c;在Ubuntu 14.04 64位下完成测试&#xff0c;通过处理中文字符显示宽度&#xff0c;避免了字符错位&#x…

2026/10/20 19:24:51 阅读更多 →
音视频服务为何是互联网的终极压力测试仪

音视频服务为何是互联网的终极压力测试仪

1. 为什么“音视频服务”是互联网真正的压力测试仪你有没有试过在地铁里点开一个4K直播&#xff0c;画面卡成PPT&#xff0c;而旁边的人刷短视频却丝滑如初&#xff1f;或者深夜和朋友连麦打游戏&#xff0c;语音断断续续&#xff0c;但微信文字消息秒回&#xff1f;这些不是玄…

2026/10/20 19:23:50 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →