作为数据目录产品,Data Catalog 通过汇总技术和业务元数据,解决大数据生产者组织梳理数据、数据消费者找数和理解数的业务场景,并服务于数据开发和数据治理的产品体系。本文介绍了字节跳动Data Catalog系统的构建和迭代过程,将分为上、下篇发布。上篇围绕Data Catalog调研思路及技术架构展开。下篇重点介绍Data Catalog关键技术和未来规划。
文 | 邱艺朴、大滨 来自字节跳动数据平台开发套件团队
DataLeap
关键技术
01 – 数据模型统一
-
类型(Type):描述一类元数据,由多个属性组成。例如,hive table是一类元数据,hive_db也是一类元数据。Type可具备继承关系。按面向对象的编程思想,可以理解type为一个Class。
-
实例(Entity):代表一个type的具体事例。一个entity可能作为一个属性存在于另一个entity中,例如hive_table中的db属性,db本身也是一个entity。在面向对象的编程思想中,一个entity可以认为是一个class的instance。
-
属性(Attribute):属性的集合组合而成为一个Type。属性本身的类型(typeName)可能是一个自定义的type,也可能是一种基础类型,包括date,string等。例如,db是hive_table的一个属性,column也是hive_table的一个属性。
-
关系(Relationship):一种特殊的Entity,用以描述两个Entity之间的关联模式。
继承与组合的广泛使用
02 – 数据接入标准化
-
Source:从外部存储计算系统等批量拉取最新的全量元数据。数据结构和字段通常由外部系统决定。概念上可对齐Flink的source operator。
-
Diff Operator:接收source的输出,并从Catalog Service拉取当前系统中的全量元数据,做差异对比,产出差异的部分。概念上对齐Flink中的某一种自定义的ProcessFunction。
-
Event Generate Operator:接收Diff Operator的输出,根据Catalog系统定义好的格式,将差异的metadata转化成event格式,比如对于新建的metadata,转换成CreateEvent。概念上对齐Flink中的某一种自定义的ProcessFunction。
-
Sink:接收Event Generate Operator的输出,将差异的metadata写入Ingestion Service。概念上对齐Flink的sink operator。
-
Bridge Job:组装pipeline,做运行时控制。概念上对齐Flink的Job。
03 – 搜索优化
-
搜索中存在部分很强的Pattern:用户搜索元数据时,有一些隐式的习惯,通过挖掘埋点中的固定pattern,给了我们针对性优化的机会。 -
行为数据规模有限:公司内部的元数据搜索用户,通常是千级别,而每天搜索的点击次数是万级别,这个规模远远小于对外的通用搜索引擎,也造成很多模型没法及时收敛,但也一定程度上给我们简化问题的机会。
-
离线部分:负责汇集各类与搜索相关的数据,做数据清洗或者模型训练,根据不同的用途,写入不同的存储,供给在线搜索模块使用。
-
在线部分:分为搜索理解、召回、精排三个主要阶段,步骤和概念上与通用搜索引擎对齐。
-
对于强Pattern,广泛使用Rule-Based的优化手段:比如,我们发现很大一部分用户在搜索Hive时,会使用“库名.表名”的pattern,在识别到query语句中有“.”时,我们会优先尝试根据库名和表名检索 -
激进的个性化:因用户规模可控,且某位用户通常会频繁使用某个领域的元数据,我们记录了很多用户的历史行为细节,当query语句与过去浏览过元数据有一定文本相关性时,个性化相关的得分会有较大提升
04 – 血缘能力
05 – 存储层优化
读优化:开启MutilPreFetch 能力
– Janusgraph 0.4版本以上且配置打开
– 语句中不包含limit
– 语句中包含has
– 查询结果行数不超过cache.tx-cache-size
写优化:去除Guid全局唯一性检查
优化前 |
优化后 |
|
小表(10列以内) |
1~2s |
<100ms |
中表(100-500列) |
3-5min |
2~5s |
超大表(3000列以上) |
15min以上,经常写入失败 |
0.5~1min,可写入 |
DataLeap
未来工作
本文转载自 字节跳动数据平台,原文链接:https://mp.weixin.qq.com/s/dKdtjlUcN-W30ns8xon5iA。