一、背景
1.1 元数据概述
元数据是凌久中台重要功能模块,是数据治理的重要一环,元数据治理是一切数据治理的基础,主要分为元数据管理和表血缘管理;
元数据管理主要用来做数据地图、数据资产等;
血缘治理主要用来追查问题数据上游表来源,以及分析当前表的对下游标影响扩散分析;
1.2 血缘构建方案调研
当前,数据血缘大多是对SQL语句进行解析,以发现上下游调用栈等信息。主流方案可分为两种:
-
运行时解析,即在任务运行时通过hook接口或者listener接口对SQL生成的逻辑技术树(AST)进行解析。
-
先采集后解析,即通过采集程序把各个计算引擎的SQL统一采集到mq进行血缘解析。
上述两类方案各有优劣,其对比如表1所示。
表1 数据血缘解析方案
关于doris的血缘方案的调研
-
Apache Doris 在橙联的应用实践:数仓架构全面革新,千万数据计算时间从 2 小时变成 3 分钟
-
基于Apache doris的元数据管理系统
-
基于Apache doris怎么构建数据中台(二)-数据中台建设内容
-
小米数据管理与应用实践
-
github上关于doris的血缘采集方案:https://github.com/DLuPan/DorisParser 该方案的功能代码很不完整,无法使用;
鉴于时间成本投入、市场主流方案两个方面考虑,选择使用“先采集后解析”的技术方案。具体来说就是使用自定义程序,解析doris输出的sql审计日志,并输出存储formTable和toTable类似的血缘关系结果,最后交给apache atlas构建血缘关系图并展示;
1.3 凌久中台元数据现状
参考资源:
-
元数据模块源码所在:http://gitlab.software.dc/mp-data/metadata
-
中台元数据操作:http://172.18.8.203:21101/app-metadata/metadataManagement/lists
-
doris血缘调研 by 范俊甫 :doris血缘预研 · 语雀
-
doris官网审计日志:审计日志插件 - Apache Doris
1.3.1 凌久中台元数据整体架构图
二、Doris血缘解析
2.1 Doris元数据管理流程图
2.2 设计步骤
第一步:开启doris的审计日志
开启doris审计日志功能开关之后,doris会会将所有的doris的sql语句全部实时输出到对应的一个审计日志文件中;
第二部:AnalyseLineageApp自定义应用采集doris审计日志,并按按照特定格式输出到sql_log表
AnalyseLineageApp为自定义doris审计日志实时采集,然后程序对sql进行血缘解析,形成来源formTable、目的toTable形成的sql_log表中;例如如下
第三步:powerjob-metadata-node读取doris元数据写入atlas服务
powerjob-metadata-node程序,定时批量读取第三步中的读取技术元数据和血缘数据,然后经过自身处理调用atlas的客户端之后写入atlas自身的存储系统中(此处为hbase、solr中)
第四步:metadata_manager启动atlas server服务
第四步的atlas server服务要先于第三步启动,这样才能保证第三步顺利写入atlas服务;
第五步:数据中台前端添加支持doris采集器
修改metadata_manager(本质是atlas server服务),
2.3 中台落地过程
如何在凌久数据中台中执行doris的元数据和血缘的采集管理?
第一步:元数据的采集准备
在"凌久数字中台" -> "元数据"-> "数据源管理",添加需要采的数据源集的元数据链接配置信息,需要特别注意:如果添加的是新的rodis集群地址(例如jdbc:mysql://127.0.0.1:9030/my_database地址中,其中,127.0.0.1:9030是新的doris集群地址),则需要首先在新的doris集群中开启审计日志,并配置filebeat应用采集doris集群的审计日志;其次是需要在新doris集群中,创建doris的sql_log表,用来存储doris的血缘原始数据;
其中2.2中第二步的sql_log血缘数据表,表结构如下,需要事先创建对应的表
CREATE TABLE `sql_log` (
`create_time` datetime NULL COMMENT "创建时间",
`db_name` varchar(255) NULL COMMENT "数据库名称",
`table_name` varchar(255) NULL COMMENT "表名",
`sql_info` varchar(8000) NULL COMMENT "SQL语句",
`from_table` varchar(255) NULL COMMENT "来源表"
) ENGINE=OLAP
DUPLICATE KEY(`create_time`, `db_name`, `table_name`)
COMMENT "doris血缘数据表"
PARTITION BY RANGE(`create_time`)
(
PARTITION p20221122 VALUES [('2022-11-22 00:00:00'), ('2022-11-23 00:00:00')),
PARTITION p20221123 VALUES [('2022-11-23 00:00:00'), ('2022-11-24 00:00:00')),
PARTITION p20221124 VALUES [('2022-11-24 00:00:00'), ('2022-11-25 00:00:00')),
PARTITION p20221125 VALUES [('2022-11-25 00:00:00'), ('2022-11-26 00:00:00')))
DISTRIBUTED BY HASH(`db_name`, `table_name`) BUCKETS 5
PROPERTIES (
"replication_allocation" = "tag.location.default: 1",
"dynamic_partition.enable" = "true",
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.time_zone" = "Asia/Shanghai",
"dynamic_partition.start" = "-30",
"dynamic_partition.end" = "3",
"dynamic_partition.prefix" = "p",
"dynamic_partition.replication_allocation" = "tag.location.default: 1",
"dynamic_partition.buckets" = "1",
"dynamic_partition.create_history_partition" = "false",
"dynamic_partition.history_partition_num" = "-1",
"dynamic_partition.hot_partition_num" = "0",
"dynamic_partition.reserved_history_periods" = "NULL",
"in_memory" = "false",
"storage_format" = "V2"
);
第二步:启动元数据采集任务
在"凌久数字中台" -> "元数据"-> "采集任务"中,启动采集任务,此时凌久中台开始了采集doris血缘的任务
第三步: 查看采集效果
在"凌久数字中台" -> "元数据"-> "元数据管理"中,查看采集的元数据效果
三、总结
工业能管中的doris血缘效果图
举例中的某一个张表
Doirs血缘地址:
http://172.18.8.203:21000