首页/数据/数仓建模速查/重跑保护:并发与状态检查
分层与规范64 条

重跑保护:并发与状态检查

重跑前检查任务状态与下游依赖,避免与正在运行的任务并发写同一分区;调度平台一般提供加锁与串行队列能力。

数仓建模速查数据更新于 2026-10-13

重跑保护:并发与状态检查

重跑最大的风险不是跑得慢,而是与仍在运行的任务并发写同一个分区。这类并发通常不报错,但产出可能是半新半旧的数据,属于隐性数据事故。所以重跑前必须做状态检查与互斥:确认任务状态、目标分区是否被占用,必要时走调度平台的串行队列或分区锁,并记录重跑原因与范围。

基本信息

前置检查任务状态与目标分区占用
并发控制同一分区互斥
实现手段调度串行队列、分区锁
留痕重跑原因、发起人与范围
禁止绕过调度手工触发生产写入

典型使用场景

  • 失败任务重跑:先确认上游已就绪、同一分区没有并发任务
  • 补数回刷:按分区加锁,避免与例行调度撞车
  • 手工修数:走平台重跑入口,而不是在客户端直接执行 SQL
  • 长任务并行:确认下游依赖不会在任务尚未结束时被触发
  • 留痕记录:把重跑原因与范围写进任务备注,事后可追溯

重跑前状态探查

重跑前状态探查
-- 确认目标分区状态与位置
SHOW PARTITIONS dws_trade_store_day PARTITION (dt = '2026-10-12');
-- 查看分区目录的文件修改时间,判断是否有任务正在写入
SHOW TABLE EXTENDED LIKE 'dws_trade_store_day' PARTITION (dt = '2026-10-12');
-- 平台侧:给同一分区的任务配置互斥(串行队列),从机制上避免并发写
-- 重跑入口固定为调度平台,不直接在客户端执行 INSERT OVERWRITE

重跑检查清单

检查项目的缺失后果
上游就绪保证输入完整重跑结果依旧错误
任务状态避免与在跑任务并发产出半新半旧数据
分区锁同分区互斥并发覆盖导致数据错乱
重跑记录事后追溯不知谁改过、为何改
两个任务并发写同一分区通常不报错,但结果不确定:可能是最后提交者生效,也可能文件互相覆盖,属于最难排查的一类数据事故。
重跑要走平台入口而不是手工执行 SQL:平台会处理依赖、锁与日志,手工执行会绕过全部保护,出事时连执行记录都查不到。

易错点

  • 失败任务与重跑任务同时执行:产出半新半旧数据,且没有任何报错提示
  • 手工绕过调度直接执行 SQL:跳过依赖与锁,破坏既有保护机制
  • 重跑不记录原因与范围:事后无法判断哪些分区被改过,对账困难
  • 补数一次触发多个分区且无互斥:并发覆盖同一批文件,结果不可复现

数据来源与参考

  • 阿里《大数据之路:阿里巴巴大数据实践》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌