数据资产治理:元数据采集那点事
以下文章来源于有赞coder ,作者有赞技术
一、介绍
数据资产治理(详情见:数据资产,赞之治理)的前提要有数据。它要求数据类型全、量大,并尽可能多地覆盖数据流转的各个环节。元数据采集就变得尤其重要,它是数据资产治理的核心底座。
数据类别多
需要采集组件的基础元数据、趋势数据、资源数据、任务数据和血缘数据。
平台组件多
大数据平台组件:Hive/Hbase/Kafka/Druid/Flume/Flink/Presto,内部工具:BI报表系统/指标库/OneService等。
采集周期长
接入新的数据类型周期长,需要经过需求评审、开发、测试、联调、数据核对、上线。
接入效率低,采集稳定性
接入每种数据类型需要和业务方对接,效率不高,采集过程出现异常中断,不能及时感知到。
二、元数据
2.1 什么是元数据
照片信息
文件名:IMG_20201217_114115
时间:2020年12月17号 11:30:01
分辨率:4608X2592
文件大小:2.69MB
相机制造商:OnePlus
相机型号:ONEPLUS A5000
闪光灯:未使用闪光灯
焦距:4.10mm
白平衡:自动
光圈:f/1.7
曝光时间:1/50
ISO:1250
2.2 采集了哪些元数据
基础元数据
表名称、备注、字段列表、责任人、业务域、表所在集群、项目等信息。
趋势数据
表的大小、行数、文件数、分区数、任务调度时长、产出时间等信息。
资源数据
集群的吞吐量、QPS、调度任务消耗Cpu、内存大小等信息。
血缘数据
表/字段级别的上下游依赖关系、任务的输入输出表依赖关系。
任务数据
离线/实时计算任务的名称、责任人、deadline告警时间、脚本、任务配置等信息。
离线平台组件
Hive/Mysql。
实时平台
Flume/Kafka/Hbase/Kylin/Es/Presto/Spark/Flink等。
内部工具
BI报表系统、指标库系统、OneService、测试QA系统。
访问Metastore获取基础元数据
一般的平台组件会把元数据存储在Mysql等关系型数据库中,通过访问Metastore获取基础的元数据。
获取组件集群资源数据
平台组件本身会提供Metrics和Alarm的监控服务,定期请求服务,把数据流入到Hbase/Opentsdb等存储。通过访问存储并对指标数据进行汇总统计,获取集群或任务的资源数据。
获取平台组件业务指标
数据中台内部有各种平台,比如KP(Kafka基础平台)、RP(Flink实时计算平台)、RDS(详情见:管理Mysql的工具平台)、DP(详情见:数据研发平台)。通过这些平台自身提供的服务获取基础元数据、业务监控指标、集群QPS、吞吐量等数据。
获取血缘数据 用户在DP平台、RP平台上开发计算任务,我们可以及时的获取发布的任务列表、任务的配置信息、SQL脚本等信息。
计算任务 通过解析任务的输入/输出依赖配置,获取血缘关系。 SQL类型任务 通过“Sql Parser”(使用ANTLR4系统实现的sql改写工具)工具解析SQL脚本获取表/字段级别的血缘关系。
3.1 离线平台
3.2 实时平台
3.3 内部工具
3.4 任务元数据
4.1 采集方式
4.2 采集SDK设计
4.2.1 架构
数据鉴权 服务端消费kafka,获取到数据后,对每条记录的签名进行认证(取到记录中的appId、appName、token信息,重新生成token并比对值的过程)。 统一入库服务 定义统一数据入库模型,包括表基础元数据、趋势数据、血缘数据、趋势数据并实现不同数据类型入库的服务。 数据适配器Bridge 获取kafka的数据,根据不同的数据类型转换成“统一入库模型”,并触发“统一入库服务”完成数据的写入。
4.2.2 通用模型
通用元数据模型 主要包括接入方信息、表基础信息、业务域信息、扩展信息。 通用趋势模型 主要包括表信息定义、趋势指标定义、扩展信息。 通用血缘模型 一张血缘图主要是由点、线组成的。点指的是表节点,边指的是任务节点;节点信息包括:节点名称、节点类型、节点扩展信息;表节点包括表基础信息,可以唯一确定一张表,任务节点包括任务的基础信息。
/**
* 表血缘模型定义
*/
@Data
public class TableLineageSchema<T extends TableNode> {
/**
* 当前节点
*/
private T current;
/**
* 父节点
*/
private List<T> parents;
/**
* 子节点
*/
private List<T> childs;
/**
* 表级别血缘扩展信息,json对象,kv结构
*/
private String extParam;
}
/**
* 表任务血缘定义
*
*/
@Data
public class JobLineageSchema<Job extends JobNode, Table extends TableNode> {
/**
* 任务节点对象
*/
private Job task;
/**
* 输入对象列表
*/
private List<Table> inputs;
/**
* 输出对象列表
*/
private List<Table> outputs;
/**
* 任务级别血缘扩展信息,json对象,kv结构
*/
private String extParam;
}
4.2.3 接入,校验,限流
4.3 触发采集
增量采集变更的数据 定期采集全量的数据 实时采集SDK上报的数据
4.3.1 增量任务,准实时
4.3.2 全量任务,兜底
4.3.3 采集SDK,实时上报
4.4 数据存储,更新
4.4.1 数据存储
4.4.2 数据更新
全量采集,找差异 全量采集时,获取平台组件的所有元数据,和资产数据库中的元数据表做全量比对,找出差异的表并设置下线。 增量采集,走约定 增量采集时,与接入方约定:已下线的表不上报,3天未更新的元数据平台会进行清理。
五、监控预警
5.1 采集链路监控告警
5.1.1 接口监控
[Warning][prod][data-dict] - 数据资产平台告警
你负责的[元信息采集]模块(backup为XXX)出现[重要]等级问题, 方法名:[com.youzan.bigdata.crystal.controller.HiveMetaController.getHiveDb], 异常信息:null
host:XXXXXX
处理地址:https://XXXX
如下所示,是服务接口的告警日报:
[Warning][prod][data-dict] - 数据资产平台告警
[shunfengche]今日问题汇总
请及时收敛今日问题,总问题数 1 个,出现 2 次
【核心】问题 0 个:
【重要】问题 0 个:
【一般】问题 1 个:
[数据采集]com.youzan.bigdata.crystal.controller.HiveMetaController.getHiveDb 今日出现 2 次, 已存在 5 天, 历史出现 8 次
host:XXXXXX
处理地址:https://XXXX
5.1.2 采集过程监控
[Warning][prod][data-dict] - 数据资产平台告警
你负责的[元信息采集]模块(backup为XXX)出现[一般]等级问题, 方法名:[com.youzan.bigdata.crystal.asyncworker.work.AsyncAllRdsDDLWorker.run], 异常信息:/n
### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLQueryInterruptedException: Query execution was interrupted
5.1.3 kafka消息积压告警
5.2 结果数据比对
表责任人:离职人员或特殊责任人(表的责任人是app,admin等)数量。
血缘:无关联的任务,无上下游的表数量。
趋势数据:表趋势值非法(默认值-1)的数量。
业务域:表所属的业务域值为-1(非法值)的数量。
5.3 项目迭代机制,采集问题收敛
六、总结和展望
6.1 总结
6.2 展望
自动化采集 目前接入新的数据类型,需要和接入方确认数据上报格式,编写数据适配器。后续考虑自动化采集,减少人工介入。接入工单系统,接入方发起工单申请,填报基础的元数据信息,管理员审批后,能够根据工单信息自动生成数据适配器,完成数据的上报。 采集任务管理 目前接入了各种组件的元数据,采集任务数25+,新增采集任务或任务下线,需要走阿波罗配置系统。采集任务管理、搜索、任务启停需求越来越强烈。 提升元数据质量 接入的元数据类型、元数据服务越来越多,对元数据的质量提出了更高的要求。如何保障数据的准确性、可用性,是后续重点要考虑的事情。· 支持业务元数据接入 目前主要接入了数据平台组件的元数据,业务方元数据占比较小,后续考虑支持快速接入业务数据,支持非结构化数据的采集和存储。
点击左下角“阅读原文”查看更多精彩文章,公众号推送规则变了,如果您想及时收到推送,麻烦右下角点个在看或者把本号置顶!