Home

2023年个人总结

1. 工作 2023年花了很大的精力,把自研的任务调度系统迁移到了 DolphinScheduler. 原有的调度系统使用 PHP 开发,非常古老,可能比公司成立时间还要早。如果放到十年前看,有很多可圈可点之处。但是近几年只能勉强维护,新的功能需求,开发两周,再加两周补开发带来的 bug. 由于离线任务调度系统的高峰是在凌晨,迁移过程熬夜挺多。也总结了一些经验,发表在了 https://mp.weixin.qq.com/s/smsNDH2MYpoys-qWz4O0Sg 22年总结实时计算时,担心 Flink 任务动态扩缩这个项目,很多收尾的工作,由于人力撤出导致盘点不全。23年这块还是出了一些问题,值得反思的地方很多。进一步的,如果提前处理了,问题就不会发生,但是价值如何自证?...

Read more

JDBC

1. JDBC 定义 Java Database Connectivity (JDBC) 定义了一套访问数据库的 API. Java Database Connectivity (JDBC) is an application programming interface (API) for the Java programming language which defines how a client may access a database.1 好处是几乎可以使用完全相同的代码,访问不同的数据库:MySQL、Hive、Doris、Presto 等等。 定义在 package java.sql,主要包含了 DriverManager Driver Connection...

Read more

大数据列存储文件格式

文件存储格式,即数据在磁盘上是如何组织的,比如 leveldb 的 sst 文件由 DataBlock、FilterBlock、IndexBlock、Footer 等组成。这种格式的设计,适应了单机写多读少、读取新写入数据的场景。 1. 大数据为何偏爱列存储 Apache ORC、Apache Parquet 都是典型的列存储格式,大数据的场景,为何偏爱列存储? 首先无论场景如何变化,从单机到大数据,面临的磁盘性能是一致的,引用 Jeff Dean 演讲的数据1: Latency Comparison Numbers (~2012) Operation Time in Nano Seconds ...

Read more

linkedin/coral 代码速读

前几天纷飞的大雪还未消融,周末又赶上降温。于是踏实关在屋里,快速读了一遍 linkedin/coral1 的代码,这篇笔记记录下整体流程。 1. 背景:SQL 重写的需求 大数据领域,随着数据量变大、时效性要求越来越多样化,SQL 计算引擎也越来越多,从原来的 HiveSQL,到如今的 Presto/Trino、Flink、Spark。同时,随着 storage format、table format、table schema 各个方向的精细发展,SQL 的形式也越来越多,短期内也很难出现事实上的统一标准。 SQL 往往需要在不同执行计算引擎间变更,比如: 分析师的 HiveSQL 运行很慢,希望能够修改为 TrinoSQL 执行 数仓工程师的 HiveSQL,希望能够统...

Read more

漫谈数据血缘系统

微服务间调用链路要清晰,才能方便的进行后续的架构升级、核心链路演练等。大数据里的表/任务之间也是如此,同时由于任务量大,血缘系统的设计更加重要。 这篇笔记记录下我理解的数据血缘系统。 1. 使用场景 大数据很多功能都会依赖血缘,例如: 数据开发:任务的修改、下线,影响产出表的操作,依赖血缘周知下游 数据治理:通过血缘分析数据间的冗余依赖、是否存在依赖环 数据资产:计算表的使用热度(血缘的入度、出度)、展示字段来源 数据质量:字段质量的归因分析(上游) 因此数据血缘系统应当作为大数据的基石来建设。 2. 如何评价 血缘做的好坏,评价标准有三点: 准确率:表关系(输入、输出)、字段关系 覆盖率:覆盖的任务、存储类型 响应时间:血缘数据复杂,需要...

Read more

如何用 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...

Read more

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...

Read more

《太白金星有点烦》书摘

“如是我闻。这件事佛祖已经跟玉帝讲过,两位都很重视。” 长庚微微眯眼:“连兜率宫都知道了,那岂不是整个天庭都传遍了?后来呢?”太上老君拿袍袖假意一挡,却挡不住双眼放光:“这事我只跟你讲,你可别告诉别人。”不待李长庚答应,太上老君迫不及待道:“我听南天门传来的消息说,奎木郎一见奸情败露,生怕玉帝责罚,直接挟了玉女下凡私奔去了,这个没确认,别瞎传啊。” 这种涉及高层的博弈,不必点破。玉帝只是送了一尾锦鲤,佛祖也只是转达给观音。两位大能均未置一词,全靠底下人默会。以观音之聪睿,自然明白上头已经谈妥了,但这种交换不能宣诸纸面。所以得由她出面,认下这个既成的事实,慧眼识猪,成全猪刚鬣。 只是李长庚没想到,玉帝的手法更加高明,只是送了条锦鲤给佛祖,说是与佛有缘。锦鲤乃...

Read more