当前位置: 首页 > news >正文

Iceberg HDP 文件监听与 Spark 任务自动提交模块设计文档

Iceberg HDP 文件监听与 Spark 任务自动提交模块设计文档

文档信息

归属服务:cspservhdp

核心实现类:IcebergSqlWatchService

触发机制:Spring 定时轮询

下游执行:Spark 集群完成 Iceberg 建表、老化数据清理

一、业务流程(文字流程图)

流程文字对应说明

  1. HDFS 分两个独立目录存放上游生成的建表、老化 sql.yaml;
  2. 服务开启两条独立定时任务,每小时分别扫描对应目录;
  3. 进入统一通用扫描方法,自动检测 Spark 运行所需配置文件,缺失则通过本地模板渲染生成 app-config.yaml、config.yaml;
  4. 读取 sql.yaml 文件修改时间,和内存 ConcurrentHashMap 缓存的上一次时间做对比;
  5. 文件无变更:直接结束本轮扫描;
  6. 文件发生更新:更新缓存时间,调用 Spark 客户端异步提交任务;
  7. Spark 集群读取 yaml 执行对应建表或数据老化清理逻辑。

二、分层组件及职责

1. 定时调度层

  1. 两套独立定时方法,互不干扰,扫描间隔统一 1 小时
    fullScan:扫描建表目录,任务标识 icebergCreateTableTask,启动延迟 5 秒
    scanAgingTaskDir:扫描老化目录,任务标识 icebergAgingTask,启动延迟 10 秒
  2. 每次扫描先校验 HDFS 集群连通状态,HDFS 不可用直接终止本轮扫描并打印错误日志
  3. 各自独立 try-catch 捕获异常,其中一个目录扫描失败不阻塞另一个定时任务

2. 通用目录扫描工具方法 scanSingleDir

统一复用逻辑,接收监听目录、配置路径、任务标识、修改时间缓存 Map、根目录、应用名称入参

  1. 判断监听 sql 目录是否存在,不存在打印警告日志直接返回
  2. 调用方法自动补全 app-config.yaml、config.yaml 两份 Spark 运行配置
  3. 获取目录下 sql.yaml 文件,进入文件变更判断逻辑

3. 模板渲染子能力

  1. loadTemplate:读取 classpath 内置 yaml 模板,使用并发 Map 缓存模板文本,避免重复读取本地资源
  2. renderTemplate:识别 ${key} 占位符,替换应用名、HDFS 根目录等参数,生成完整配置文本
  3. writeHdfsFile:将渲染后的配置写入指定 HDFS 路径,打印生成成功 / 失败日志

4. 文件变更判断逻辑 processFileChange

  1. 维护两套独立 ConcurrentHashMap,分别缓存建表、老化 sql.yaml 上次修改时间,保证线程安全
  2. 对比当前文件修改时间与缓存值,一致则直接返回,不提交任务
  3. 时间发生变化则更新缓存记录,发起 Spark 任务提交

5. Spark 任务提交能力 submitSparkTask

依赖 SparkClientUDA 客户端实现异步任务提交,传入任务名称、HDFS 任务配置文件路径;

提交过程出现异常抛出 ScheduleProcessingException,由上层定时方法捕获记录错误日志。

三、输入输出定义

输入

  1. 上游产出:aggregation-schedule 模块生成,存放在 HDFS 两套目录的 sql.yaml(建表 DDL、老化 DML)
  2. 静态资源:classpath 下 app-config-template.yaml、config-template.yaml 任务模板
  3. 底层依赖工具:HdfsClient、SparkClientUDA

输出

  1. 自动产物:HDFS 目录下 Spark 运行配置文件 app-config.yaml、config.yaml
  2. 执行动作:异步提交 Spark 任务,分为两类执行逻辑
    建表任务:执行 CREATE NAMESPACE、CREATE TABLE IF NOT EXISTS
    老化任务:执行 DELETE 过期数据、expire_snapshots 清理快照、remove_orphan_files 清理孤立文件

四、隔离设计

  1. 存储隔离:建表、老化使用完全独立 HDFS 根目录、独立 sql 监听子目录
  2. 资源隔离:独立任务名称、独立定时方法、独立修改时间缓存 Map
  3. 异常隔离:两个定时任务独立捕获异常,故障互不影响

五、核心设计规则

  1. 轮询周期:固定 3600000 毫秒(1 小时)执行一次扫描
  2. 幂等设计:基于文件修改时间缓存做增量判断,文件无更新不会重复提交 Spark 任务
  3. 免人工运维:Spark 依赖的配置文件缺失时自动根据模板生成,无需人工上传维护
  4. 性能优化:模板文本全局内存缓存,减少频繁 IO 读取本地模板文件

六、容错处理规则

  1. HDFS 集群离线:直接跳过本次扫描,输出错误日志
  2. 监听 sql 目录不存在:仅打印警告日志,不中断服务运行
  3. 模板读取、HDFS 文件写入异常:捕获异常记录错误日志,不终止服务
  4. Spark 任务提交失败:抛出业务调度异常,可对接监控告警
  5. 单目录扫描异常仅中断当前任务,另一套定时扫描正常执行不受影响
http://www.gsyq.cn/news/1605552.html

相关文章:

  • 给孩子选护眼台灯前,先看完这篇:10款主流型号真实差距拆解(含书客/霍尼韦尔/明基/松下/米家等),哪个牌子的护眼灯好用?一步到位选对灯!
  • 专业在线排计划工具落地应用指南
  • Kubernetes StatefulSet 容器存储架构
  • 百考通一次搞定查重高、AI概率高难题
  • 装错软件连不上PLC?主流品牌版本机型特点,收藏这篇不踩坑
  • 基于 ESP32 的智能晾衣架控制系统设计与实现
  • 深度学习自然语言
  • 建立Geo思维:如何在日常工作中像大模型一样思考问题
  • SpringBoot整合Redis:缓存策略与实战案例
  • APA架构解析:AI Agent+RPA+治理引擎,企业自动化的三层技术栈如何协同
  • 智能包装行业发展趋势与中科天工技术创新
  • 次函数图像工厂:用 SymPy 自动生成 y=kx+b 对比动画合集 - manim动画(43)
  • 30家商家实证:数字人直播90%的钱都白花了?2026全周期选型白皮书
  • 雷达编程实战之FFT的窗函数与补零策略
  • 2026年下半年量化工具选择,先说清交易规则
  • app_power.c 学习笔记:从端口状态机到 DCDC 调压链路
  • 防爆电气工程选型 不同供应商产品线定位与场景适配参考
  • 字节跳动Seedance:从“卖Token”到“卖生产力”,多赛道试水开启商业化新征程
  • bilibili视频解析:3分钟学会获取B站高清播放地址的实用指南
  • MSC许可管理系统的选择与使用:优化软件资源管理新途径
  • 城中村出入口改造,让居住更有秩序
  • 人才公寓智慧通行,让安居更安心
  • 2026年跨境电商新机遇:避开这5个坑,中小卖家如何用AI选品月入10万?附最新平台政策解读
  • 实战:从水色到纸币——彩色图像识别模型的双场景应用
  • Claude 4 Opus 评测 2026:200K 上下文与中文创作之王
  • CTF实战:巧用文件结构修复图片宽高
  • Android中App电量优化
  • 防止 iOS 应用被二次打包 代码混淆 和 签名校验的防篡改方案
  • Ryujinx:在PC上免费体验Nintendo Switch游戏的全能模拟器
  • 元器件为什么会失效?