漫谈数据血缘系统
微服务间调用链路要清晰,才能方便的进行后续的架构升级、核心链路演练等。大数据里的表/任务之间也是如此,同时由于任务量大,血缘系统的设计更加重要。
这篇笔记记录下我理解的数据血缘系统。
1. 使用场景
大数据很多功能都会依赖血缘,例如:
数据开发:任务的修改、下线,影响产出表的操作,依赖血缘周知下游
数据治理:通过血缘分析数据间的冗余依赖、是否存在依赖环
数据资产:计算表的使用热度(血缘的入度、出度)、展示字段来源
数据质量:字段质量的归因分析(上游)
因此数据血缘系统应当作为大数据的基石来建设。
2. 如何评价
血缘做的好坏,评价标准有三点:
准确率:表关系(输入、输出)、字段关系
覆盖率:覆盖的任务、存储类型
响应时间:血缘数据复杂,需要...
如何用 ANTLR 解析和重写SQL
1. 简介
ANTLR(ANother Tool for Language Recognition)1是一个强大的 parser generator,可以根据规则生成 parser 代码,用于读取、处理、执行和翻译结构化或二进制数据。Hive/Trino/Spark/Flink/Doris/… 等常见大数据组件都用到了 ANTLR.
如果要实现 C++ 代码的解析器,需要提取出其中的变量、常量、关键字、注释;解析 JSON ,需要提取出{} [] '";解析 SQL、Protobuf 也是如此。 解析完成后,还需要能够遍历结果树,判断语法是否正确。
ANTLR 使用通用的方式解决了这一点,并对应分成两个步骤:
LEXER: 输入流解析为 tokens
PARSER: t...
DolphinScheduler-10: quartz
之前讲工作流的启动,源头是t_ds_command表,这篇笔记讲讲该表数据是如何写入的,也就是 Crontab 的生效过程。
1. quartz
简单的 crontab 实现方式很多,java.util.Timer、spring @Scheduled、akka scheduler etc.。 quartz1也是一个调度框架,可以集成在 java 程序里,好处是持久化和分布式。
我觉得 quartz 里最重要的概念有三个:
JobDetail: 用户继承该基类实现自己的任务类,执行具体任务
Trigger: 任务触发器,比如一次性触发、Crontab 触发等
Scheduler: 调度器,接收 JobDetail,按照 Trigger 调度
JobBuilder...
DolphinScheduler-9: 容错
1. 容错的必要性
分布式系统使用集群提高了算力,也天然需要面对和解决单机不稳定的问题,比如常说的宕机、掉盘、网络抖动等。
Jeff Dean 多年前在斯坦福有过一个分享1,其中一些数字我觉得应该是架构谨记的:
Typical first year for a new cluster:
~1 network rewiring (rolling ~5% of machines down over 2-day span)
~20 rack failures (40-80 machines instantly disappear, 1-6 hours to get back)
~5 racks go wonky (40-80 machines see 50% packet...
237 post articles, 30 pages.