采集自动组合(元数据资产治理(详情见),需注意什么?)

优采云 发布时间: 2021-11-05 04:14

  采集自动组合(元数据资产治理(详情见),需注意什么?)

  一、简介

  数据资产治理的前提(见:)必须有数据。它要求数据类型齐全,数量大,并尽可能覆盖数据流通的方方面面。元数据 采集 变得尤为重要。它是数据资产治理的核心基础。

  在早期的采集系统中,我们主要使用“API直连”来连接采集Hive/Mysql表元数据。随着业务的快速发展,对数据运营和成本管理的需求越来越强烈。元数据需要覆盖整个数据链路,包括离线计算平台、实时计算平台、内部工具、任务元数据等。采集在元数据的过程中,我们遇到了以下困难:

  本文主要介绍了我们在元数据含义、提取、采集、监控告警等方面所做的一些事情。

  二、元数据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

  这些是数码照片的元数据,用于描述图片。在资产管理平台中,我们采集Hive组件的元数据包括:表名、字段列表、负责人、任务调度信息等。

  采集全链路数据(各种元数据)可以帮助数据平台回答:我们有哪些数据?有多少人在使用它?什么是数据存储?如何找到这些数据?什么是数据流?分析问题的根源,结合血缘关系分析影响。

  2.2 采集 什么元数据

  如下图所示,是一个数据流图。我们主要采集各个平台组件:

  截至目前,采集所达到的平台组件已经覆盖了整个数据链路。涵盖10种数据+,基础元数据量10w+。主要包括:

  三、元数据提取

  如何从众多平台组件中提取元数据?大致有以下几个方面:

  计算任务通过分析任务的输入/输出依赖配置获得血缘关系。SQL类任务使用“Sql Parser”(ANTLR4系统实现的sql重写工具)工具解析SQL脚本,获取表/字段级血缘关系。3.1 线下平台

  主要是采集Hive/RDS表的元数据。

  Hive组件的元数据存放在Metastore中,通过JDBC访问Mysql获取数据库表的元数据。根据Hive表信息组装HDFS地址,通过FileSystem API获取文件状态、文件编号、文件大小、数据更新时间等趋势数据。

  RDS平台提供Mysql服务的管理,通过平台提供的服务接口获取表元数据、趋势数据、访问状态等信息。

  3.2 实时平台

  主要是Flume/Hbase/Kafka等组件的元数据。

  例如:我们访问放置在KP平台的工单数据,获取topic的基本元数据信息,定期消费topic获取样本数据,解析字段列表。平台本身提供集群状态和业务监控指标,通过平台服务获取集群资源的使用情况。

  3.3 内部工具

  主要是BI报表系统的血缘关系数据(BI报表查询的Hive表和Mysql表关系)、指标数据库(Hive表和指标相关的字段关系)、OneService服务(访问哪些数据库表的关系数据)通过接口)。

  这些内部系统在产品的不断迭代中积累了大量的元数据。在不考虑元数据的时效性的情况下,我们一般都是将这些系统的数据同步到Hive数据库中,然后离线处理后获取元数据。

  3.4 任务元数据

  元数据任务主要是DP离线任务、Flink计算服务和Flume任务。

  这些计算任务都放在磁盘上,通过Binlog同步或离线同步获取任务列表,获取任务的元数据。

  四、数据采集

  元数据提取后,我们就可以得到数据链中各个平台组件的元数据。数据采集是指将这些元数据存储在数据资产管理系统的数据库中。

  4.1 采集 方法

  采集 主要有三种数据类型。下表列出了三种方法的优缺点:

  一般情况下,我们推荐业务方使用采集SDK。主动上报元数据,访问时只需要关注上报数据格式和SDK初始化,即可快速完成上报。

  4.2 采集SDK 设计

  采集SDK支持基础元数据、趋势数据、血缘关系数据的上报,包括客户端SDK和采集服务器两部分。客户端SDK主要实现通用报表模型的定义和报表功能,采集服务器主要实现不同的适配器,完成数据的统一存储。

  4.2.1 架构

  采集SDK 客户端

  定义了基本元数据(MetaSchema)、趋势数据(TrendSchema)和血缘关系数据(LineageSchema)的通用模型,并支持新的报告模型(XXXSchema)。ReportService实现了向Kafka推送数据的功能。

  采集服务器

  数据鉴权服务器消费Kafka,获取数据后,对每条记录的签名进行鉴权(获取记录中的appId、appName、token信息,重新生成token,比较值的过程)。统一仓储服务定义了统一的数据仓储模型,包括表基础元数据、趋势数据、血缘关系数据、趋势数据,实现不同数据类型的仓储服务。数据适配器Bridge获取Kafka的数据,根据不同的数据类型转换成“统一存储模型”,触发“统一存储服务”完成数据写入。4.2.2 通用型号

  采集的平台组件很多。我们参考Hive“表模型”的定义,抽象出一套通用的数据上报模型,保证数据上报和数据存储的可扩展性。

  通用血缘模型主要包括血缘模型定义和任务血缘模型定义,支持用户分别上报血缘关系和任务血缘关系。该模型定义如下:

  /**

* 表血缘模型定义

*/

@Data

public class TableLineageSchema {

/**

* 当前节点

*/

private T current;

/**

* 父节点

*/

private List parents;

/**

* 子节点

*/

private List childs;

/**

* 表级别血缘扩展信息,json对象,kv结构

*/

private String extParam;

}

  /**

* 表任务血缘定义

*

*/

@Data

public class JobLineageSchema {

/**

* 任务节点对象

*/

private Job task;

/**

* 输入对象列表

*/

private List inputs;

/**

* 输出对象列表

*/

private List outputs;

/**

* 任务级别血缘扩展信息,json对象,kv结构

*/

private String extParam;

}

  每个模型定义都有一个扩展字段(传统的 json 格式)。不在定义中的指标可以放在扩展字段中。数据上报后,也会存储在元数据表的扩展字段中。访问新类型,索引定义大不相同,通过扩展新的数据模型定义,元数据报告完成。

  4.2.3 访问、验证、限流

  如何保证用户上报的数据是安全的?我们设计了一组签名:访问方Id(appId)、访问名称(appName)、访问标识(token)。管理员填写基本接入方信息,生成随机的appId和token信息。业务方在初始化采集SDK时,指定了签名信息,每上报的数据都会携带签名。在采集服务器上,每一条数据都会经过签名和认证,保证了数据的安全。

  采集SDK 会对上报的每条数据执行通用规则来检查数据的有效性,例如表名不为空、负责人的有效性、表的大小、趋势数据不能为负。如果检测到非法数据,将被过滤掉并触发报警通知。

  在采集SDK服务器上,每隔一定时间(每两秒)消费一批Kafka数据。支持设置消费数据的时间间隔和拉取的片数。下游入站压力不会因上报数据流量高峰而变化。大,起到了限流作用。

  4.3 触发器采集

  我们支持多种 采集 元数据方法。如何触发数据的采集?总体思路是:

  基于Apollo配置系统(见:)和Linux系统的Crontab功能,实现任务调度。数据采集任务在Apollo上配置。配置改变后,Apollo会发布,配置信息会实时同步到在线节点的Crontab文件中。

  4.3.1 增量任务,准实时

  支持获取组件最近变化的元数据,配置增量任务,提高元数据采集的实时性。比如增量采集Hive表元数据,每1分钟查询一次metastore,获取最近更改的元数据列表,并更新元数据。

  4.3.2个完整任务,所有细节

  增量 采集 可能有数据丢失的情况。每 1 天或更多天完成一次 采集 作为底线解决方案,以确保元数据的完整性。

  4.3.3 采集SDK,实时上报

  采集SDK 支持实时和全量上报模式。一般要求在数据变更后实时上报接入方的数据,不定期上报一次全量。

  4.4 数据存储、更新

  在数据采集之后,就要考虑如何存储,以及元数据发生变化时如何同步更新。我们对来自采集的元数据进行归类和统一,抽象出“表模型”并将其存储在类别中。

  4.4.1 数据存储

  我们评估了每个组件的元数据量(共10w+),预估了数据可能的使用场景,最终选择了Mysql来存储。为了满足用户的个性化查询需求,构建了Es宽表。表粒度主要包括:表名、备注、负责人、字段列表、趋势信息、业务领域信息、任务信息等。Es表在数据采集过程中同步更新,保证真实元数据查询的时间性,定期更新(构建离线模型表,每天同步更新Es表),保证元数据的完整性。

  元数据中的表不是孤立存在的。一般有关联任务(离线任务、实时任务)输出表,表和任务之间的流向关系也会在数据图中显示。那么如何在众多平台组件中唯一区分一个表呢?我们通过表所在的集群名称、项目名称、表类型(它来自哪个平台组件)和表名称的组合来唯一区分。

  对数据进行分类存储,最终形成:基础元数据表、趋势数据表、任务元数据表、血缘关系数据表。

  4.4.2 数据更新

  元数据表离线,如何同步更新?

  五、监控和警告

  采集 已经完成了数据,是不是都做完了?答案是否定的。采集在这个过程中,数据类型很多,删除方式多种多样,删除链接长度。任何环节的任何问题都会导致结果不准确。我们通过以下方式保证采集服务的稳定性。

  5.1 采集链路监控告警5.1.1 接口监控

  我们将系统的所有服务接口分为核心、重要、通用三个层次,并支持标注接口和责任人的注解。异常会触发不同级别的警报通知。核心业务异常直接触发电话报警,重要或一般业务异常触发电子邮件报警。系统会存储接口请求和执行状态并删除,每天向接口服务负责人发送服务日报。通过将采集服务的元数据标记为核心和重要服务,“API直连方式”的接口被异常感知。

  如下图,是服务接口的告警通知:

  [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.jdb*敏*感*词*.MySQLQueryInterruptedException: Query execution was interrupted

  5.1.3 Kafka 消息积压警告

  Kafka数据的消费,通过kp平台配置消息backlog告警,实现对采集SDK服务的异常感知。

  5.2 结果数据对比

  主要用于事后监测预警,定期检测采集元数据量的异常波动。针对不同类型的元数据,通过将当天采集的数量与过去7天的历史平均数量进行比较,设置异常波动的报警阈值,超过阈值时触发报警通知.

  针对采集的元数据结果表,配置一些数据质量检测规则,定期执行异常规则,发现问题数据时触发告警通知。这保证了对结果数据的异常感知。例如,定义的数据质量规则:

  5.3 项目迭代机制,采集问题收敛

  通过事前、事中、事后的监测预警机制,可以及时发现和感知采集的异常情况。对于异常问题,我们一般以项目迭代的方式发起jira,组织相关人员进行审核。追根溯源,讨论改进方案,产生行动,关注并持续收敛问题。

  六、总结与展望6.1 结论

  我们定义了一套通用的数据采集和存储模型,支持访问不同数据类型的元数据,支持多种访问方式,采集SDK提高了访问效率和数据时效性。

  如下图所示,各个组件的元数据已经打通,数据分类统一管理,提供了数据字典、数据地图、资产市场等元数据的应用。

  如果将数据资产治理比作高层建筑的建设,那么不同构件的元数据是原材料,数据采集是基础。只有夯实了基础,数据治理的建设才能越来越稳固。

  6.2 展望

  在数据采集的过程中,我们也遇到了很多问题。在后续工作中,我们需要不断的优化和功能迭代,包括但不限于:

  最后,有赞数据中心,长期招聘基础组件、平台研发、数据仓库、数据产品、算法等人才,欢迎加入,一起享受~简历投递邮箱:。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线